Solved

set JAVA_HOME for a win2000 batch file

Posted on 2002-07-28
29
580 Views
Last Modified: 2008-02-01
I wrote a .bat file to run a java application on win2000:
@set JAVA_HOME=C:\JavaSoft\JRE\1.3.1_04
works fine, but
@set JAVA_HOME=C:\Program Files\JavaSoft\JRE\1.3.1_04
or
@set JAVA_HOME="C:\Program Files\JavaSoft\JRE\1.3.1_04"
doesn't work!

How I can set JAVA_HOME, with a path name that contains spaces?
0
Comment
Question by:s_lavie
  • 14
  • 13
  • 2
29 Comments
 
LVL 1

Expert Comment

by:klf
Comment Utility
change Program Files to PROGRA~1
0
 
LVL 2

Author Comment

by:s_lavie
Comment Utility
What if my directory name is "New Folder"? (and I have also "New Folder1" and "New Folder2")
0
 
LVL 1

Expert Comment

by:klf
Comment Utility
open a dos window and do dir /X this should give you the short file names.
0
 
LVL 92

Expert Comment

by:objects
Comment Utility
Try setting the various different homes in your system environment:

JAVA_HOME1=...
JAVA_HOME2=...

And then in your batch file use:

set JAVA_HOME="%JAVA_HOME2%"
0
 
LVL 2

Author Comment

by:s_lavie
Comment Utility
klf,
I want to set this variable automatically during installation (using the JavaHome registry value).
Is there a way to find the short file name in runtime (using java or whatever).
My installation application is generated by InstallShield Multi Platform.

objects,
I wish not to set a system environment unless it's a must...
0
 
LVL 92

Expert Comment

by:objects
Comment Utility
BTW, exactly how doesn't it work?  I don't recall ever having problems with long filenames in batch files.
0
 
LVL 2

Author Comment

by:s_lavie
Comment Utility
The relevant part in my batch is as following:

@set JAVA_HOME=
@if EXIST "%JAVA_HOME%\bin\java.exe" GOTO JAVA_HOME_OKAY
   @ECHO.   JAVA_HOME is not set properly !!!
   @GOTO THE_END
:JAVA_HOME_OKAY

Now,
For:
@set JAVA_HOME=C:\Program Files\JavaSoft\JRE\1.3.1_04
I get:
'C:\Program' is not recognized as an internal or external command, operable program or batch file.

For:
@set JAVA_HOME="C:\Program Files\JavaSoft\JRE\1.3.1_04"
I get:
JAVA_HOME is not set properly !!!

For:
@set JAVA_HOME="C:\Progra~1\JavaSoft\JRE\1.3.1_04"
I get:
Exception in thread "main" java.lang.NoClassDefFoundError: \bin\java

And only:
@set JAVA_HOME=C:\Progra~1\JavaSoft\JRE\1.3.1_04
works fine!
0
 
LVL 92

Expert Comment

by:objects
Comment Utility
Try the following:

@set JAVA_HOME="C:\Program Files\JavaSoft\JRE\1.3.1_04"
@if EXIST %JAVA_HOME%\bin\java.exe GOTO JAVA_HOME_OKAY
  @ECHO.   JAVA_HOME is not set properly !!!
  @GOTO THE_END
:JAVA_HOME_OKAY

0
 
LVL 2

Author Comment

by:s_lavie
Comment Utility
Same as 3:
Exception in thread "main" java.lang.NoClassDefFoundError: \bin\java
)-;
0
 
LVL 92

Expert Comment

by:objects
Comment Utility
The problem might be further on in your batch, cause that segment works fine here.
0
 
LVL 2

Author Comment

by:s_lavie
Comment Utility
Here is the original batch file:

@ECHO OFF

@set JAVA_HOME=C:\JavaSoft\JRE\1.3.1_04
@set SERVER_HOME="C:\ProductName\server"

@if EXIST "%JAVA_HOME%\bin\java.exe" GOTO JAVA_HOME_OKAY
   @ECHO.
   @ECHO.  
   @ECHO.   JAVA_HOME is not set properly !!!
   @ECHO.
   @ECHO.   (Please set the JAVA_HOME environment variable)
   @ECHO.
   @ECHO.  
   @PAUSE
   @GOTO THE_END
:JAVA_HOME_OKAY

%JAVA_HOME%\bin\java -Djava.rmi.server.codebase=file:%SERVER_HOME%\server.jar -Djava.security.policy=file:%SERVER_HOME%\rmi.policy -jar server.jar

@ECHO ON
0
 
LVL 92

Accepted Solution

by:
objects earned 150 total points
Comment Utility
Try:

@ECHO OFF

@set JAVA_HOME=C:\Program Files\JavaSoft\JRE\1.3.1_04
@set SERVER_HOME="C:\ProductName\server"

@if EXIST "%JAVA_HOME%\bin\java.exe" GOTO JAVA_HOME_OKAY
  @ECHO.
  @ECHO.  
  @ECHO.   JAVA_HOME is not set properly !!!
  @ECHO.
  @ECHO.   (Please set the JAVA_HOME environment variable)
  @ECHO.
  @ECHO.  
  @PAUSE
  @GOTO THE_END
:JAVA_HOME_OKAY

"%JAVA_HOME%\bin\java" -Djava.rmi.server.codebase=file:%SERVER_HOME%\server.jar -Djava.security.policy=file:%SERVER_HOME%\rmi.policy -jar server.jar

@ECHO ON
0
 
LVL 2

Author Comment

by:s_lavie
Comment Utility
Great!
While in this subject, I wonder whether you have something for this (extra points is a promise):

In my policy file:

grant
{
 // Allow everything for now
 permission java.net.SocketPermission  "*:1024-65535", "accept, connect, listen";
};

grant codeBase "file:C:/Test/NewFolder/server/-"
{
 permission java.security.AllPermission;
};
It runs OK (when folder name has no spaces)!

For:
grant codeBase "file:C:/Test/New Folder/server/-"
{
 permission java.security.AllPermission;
};
It throws:
RemoteException occurred in server thread; nested exception is:
        java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
        java.net.MalformedURLException: no protocol: Folder\server\server.jar in Server::main()

For:
grant codeBase file:C:/Test/New Folder/server/-
{
 permission java.security.AllPermission;
};
It throws:
access denied (java.net.SocketPermission 127.0.0.1:1199 connect,resolve) in Server::main()
java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:1199 connect,resolve)
0
 
LVL 92

Expert Comment

by:objects
Comment Utility
I would have thought the following was correct:

grant codeBase "file:C:/Test/New Folder/server/-"
{
permission java.security.AllPermission;
};

The exception you are getting may not be related to the policy entry. And you are just experiencing it because the (bad) code is getting permission to execute.
0
How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

 
LVL 2

Author Comment

by:s_lavie
Comment Utility
Is it "possible" that the same (bad) code would work for:
grant codeBase "file:C:/Test/NewFolder/server/-"
{
permission java.security.AllPermission;
};
???
(Of course its possible, everything is possible with software, but does it make sense?)
0
 
LVL 92

Expert Comment

by:objects
Comment Utility
Maybe as the url that it is blowing up on will be different. Find where that URL is specified and u may find your problem :)
0
 
LVL 2

Author Comment

by:s_lavie
Comment Utility
This line:
Naming.bind("//localhost:1099/MgmtServer");
Causes:
java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
        java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
        java.net.MalformedURLException: no protocol: Folder\server\server.jar
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:

        java.net.MalformedURLException: no protocol: Folder\server\server.jar
java.net.MalformedURLException: no protocol: Folder\server\server.jar
        at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(Unknown Source)
        at sun.rmi.transport.StreamRemoteCall.executeCall(Unknown Source)
        at sun.rmi.server.UnicastRef.invoke(Unknown Source)
        at sun.rmi.registry.RegistryImpl_Stub.bind(Unknown Source)
        at java.rmi.Naming.bind(Unknown Source)
        at Server.main(Server.java:98)

... when using "New Folder", but works fine for "NewFolder" - any obvious reason?
0
 
LVL 92

Expert Comment

by:objects
Comment Utility
I think the exception is actually being thrown on the server (when the client tries to connect).
0
 
LVL 92

Expert Comment

by:objects
Comment Utility
Maybe the codebase used to start your server.
0
 
LVL 2

Author Comment

by:s_lavie
Comment Utility
The client is not trying to connect.
The exception is being thrown when the server is loaded...
0
 
LVL 2

Author Comment

by:s_lavie
Comment Utility
> Maybe the codebase used to start your server.
I guess it is (I use the above batch file):

@set SERVER_HOME="C:\Test\New Folder\server"

"%JAVA_HOME%\bin\java" -Djava.rmi.server.codebase=file:%SERVER_HOME%\server.jar -Djava.security.policy=file:%SERVER_HOME%\rmi.policy -jar server.jar
0
 
LVL 2

Author Comment

by:s_lavie
Comment Utility
Should I use the codebase to start the server?
If I don't it seems to work fine ;-)
0
 
LVL 92

Expert Comment

by:objects
Comment Utility
Try:

@set SERVER_HOME=C:\Test\New Folder\server

"%JAVA_HOME%\bin\java" -Djava.rmi.server.codebase="file:%SERVER_HOME%\server.jar" -Djava.security.policy="file:%SERVER_HOME%\rmi.policy" -jar server.jar
0
 
LVL 2

Author Comment

by:s_lavie
Comment Utility
Well, I guess I'll skip the codebase when starting my server.
Unless you think it's a bad idea...
0
 
LVL 92

Expert Comment

by:objects
Comment Utility
did the above batch changes help?
0
 
LVL 2

Author Comment

by:s_lavie
Comment Utility
No )-;
What is the purpose of starting the server with the codebase, anyway? (I just saw that in an example)
0
 
LVL 92

Expert Comment

by:objects
Comment Utility
0
 
LVL 2

Author Comment

by:s_lavie
Comment Utility
Thanks.
0
 
LVL 92

Expert Comment

by:objects
Comment Utility
0

Featured Post

Enabling OSINT in Activity Based Intelligence

Activity based intelligence (ABI) requires access to all available sources of data. Recorded Future allows analysts to observe structured data on the open, deep, and dark web.

Join & Write a Comment

Suggested Solutions

By the end of 1980s, object oriented programming using languages like C++, Simula69 and ObjectPascal gained momentum. It looked like programmers finally found the perfect language. C++ successfully combined the object oriented principles of Simula w…
Java functions are among the best things for programmers to work with as Java sites can be very easy to read and prepare. Java especially simplifies many processes in the coding industry as it helps integrate many forms of technology and different d…
Viewers learn about the scanner class in this video and are introduced to receiving user input for their programs. Additionally, objects, conditional statements, and loops are used to help reinforce the concepts. Introduce Scanner class: Importing…
Viewers learn how to read error messages and identify possible mistakes that could cause hours of frustration. Coding is as much about debugging your code as it is about writing it. Define Error Message: Line Numbers: Type of Error: Break Down…

744 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

15 Experts available now in Live!

Get 1:1 Help Now