Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to run javac with paths as argument that contain white spaces?

Tags:

windows

javac

I am trying to run the following

javac -Xlint:unchecked -classpath C:/Users/a b/workspace/ @C:/Users/a b/workspace/files_to_compile

but I'm getting a

javac: invalid flag C:/users/a

I've also tried to surround both paths with double quotes but it doesn't seem to help a bit:

javac -Xlint:unchecked -classpath "C:/Users/a b/workspace/" @"C:/Users/a b/workspace/files_to_compile"

What am I doing wrong? This same code worked correctly in other computers (probably because they didn't have any white space in their paths..).

Thanks

like image 809
devoured elysium Avatar asked Jan 19 '12 23:01

devoured elysium


People also ask

Why do we need to set the path for javac in command line?

Why do we need to set the path for JavaC in command line? -To make JavaC available or accessible in command line.

What is javac Xlint?

The Java programming language compiler (javac) provided by Oracle (and formerly by Sun) has several non-standard options that are often useful. One of the most useful is the set of non-standard options that print out warnings encountered during compilation.


3 Answers

I've finally come up with the solution to the issue, and I guess no one here could have guessed it.

The cue to the answer lies with the fact that the contents of the files list (signaled as @ in the args) generally will have each one of its strings with the initial substring equal to what one passes as both the class path and the @ file.

so..

The trouble was never the command line parameters, as suggested, but with the contents of the @ file.

Each line of the file must be put in its own line, surrounded by quotes, and having into consideration that if you're in windows, you have to put the file names in the form of C:\\a\\b\\c.txt!!!

like image 53
devoured elysium Avatar answered Oct 19 '22 21:10

devoured elysium


Your second try is right

javac -Xlint:unchecked -classpath "C:/Users/a b/workspace/" @"C:/Users/a b/workspace/files_to_compile"

But to be complete, you have to escape the spaces into the text file "files_to_compile" by using:

  • the same syntax as properties file : \

or

  • double quote each line

I suggest the second but I'm not sure.

like image 44
Aubin Avatar answered Oct 19 '22 21:10

Aubin


I have to admit this was more difficult than I had imagined. After some trial and error I came up with the following:

C:\lol>"C:\Program Files\Java\jdk1.7.0_07\bin\javac" -cp "c:\lol\a b;c:\lol\foo bar" Lol.java

where the folder structure is like:

./foo bar
./foo bar/Moo.java
./Lol.java
./a b
./a b/AB.java

I made an archive with the folders and the java files, which you can grab at: http://www.pvv.ntnu.no/~rakhmato/tmp/lol.tar

You should ignore the @ option because it is enough to give the compiler one file and a proper class path, it can figure out where everything is on its own. Just give the compiler your Main.java and it will figure out what that file depends on.

I would also recommend you to write a .bat script of sorts to make things simpler. Nothing fancy, something like this:

compile.bat:

"C:\Program Files\Java\jdk1.7.0_07\bin\javac" -classpath "c:\lol\a b;c:\lol\foo bar" Main.java

..put that in your project folder and run compile.bat from CMD

like image 2
Ярослав Рахматуллин Avatar answered Oct 19 '22 21:10

Ярослав Рахматуллин