如何运行带有路径的javac作为包含空格的参数?

时间:2012-01-19 23:33:17

标签: windows javac

我正在尝试运行以下

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

但我得到了

javac: invalid flag C:/users/a

我也尝试用双引号括住这两个路径,但似乎没什么帮助:

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

我做错了什么?这个相同的代码在其他计算机上正常工作(可能是因为它们的路径中没有任何空白区域。)。

由于

9 个答案:

答案 0 :(得分:4)

你的第二次尝试是对的

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

但要完成,您必须使用以下命令将空格转义为文件文件“files_to_compile”:

  • 与属性文件相同的语法:\

  • 每行双引号

我建议第二个,但我不确定。

答案 1 :(得分:4)

我终于找到了问题的解决方案,我想这里没有人能猜到它。

答案的提示在于这样一个事实:文件列表的内容(在args中用@表示)通常会使其每个字符串的初始子字符串等于一个传递的类路径和@文件。

所以..

问题绝不是建议的命令行参数,而是@文件的内容。

文件的每一行必须放在它自己的行中,用引号括起来,并考虑到如果你在windows中,你必须以C:\\a\\b\\c.txt的形式放置文件名! !

答案 2 :(得分:2)

我不得不承认这比我想象的要困难得多。 经过一些反复试验后,我想出了以下内容:

C:\ lol>“C:\ Program Files \ Java \ jdk1.7.0_07 \ bin \ javac”-cp“c:\ lol \ ab; c:\ lol \ foo bar”Lol.java

文件夹结构如下:

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

我使用文件夹和java文件进行了存档,您可以从中获取: http://www.pvv.ntnu.no/~rakhmato/tmp/lol.tar

你应该忽略@选项,因为它足以给编译器一个文件和一个正确的类路径,它可以找出它自己的所有内容。只需给编译器你的Main.java,它将找出该文件所依赖的内容。

我还建议你编写一个类似的.bat脚本来简化操作。没什么好看的,像这样:

的compile.bat:

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

..将它放在你的项目文件夹中并从CMD运行compile.bat

答案 3 :(得分:2)

  • 首先在shell中使用cd命令将目录移动到保存文件的目录。

    cd /home/sayantani/PERSONAL\ FILES/sem\ 4\ courses/PLC/code/
    
  • 请注意,只要有空间,我就会使用“\”。 “个人档案”变为“个人档案”。

  • 然后使用“javac filename.java”

    javac hello1.java
    

这应该可以解决您的问题。 请注意,在默认目录的整个路径上执行“javac”不起作用。(对我而言)

答案 4 :(得分:0)

你需要逃离空间。

\放在每个空格的前面并尝试。

答案 5 :(得分:0)

仅获取源字符串的第一部分会从路径中删除a b之间的空格,它应该可以正常工作C:/Users/a_b/workspace/" @"C:/Users/a_b/workspace/files_to_compile"。从来没有你应该在路径中有空格,编译器会忽略后一部分,否则你可以在a\ b

之间放一个'\'

答案 6 :(得分:0)

有点破解,但是如果你在Windows 7上,你可以使用mklink实用程序来创建指向同一个地方的另一个文件夹但没有空格。

编辑:也许是更好的解决方案:

cd "C:/Users/a b/"
javac ... -classpath "Workspace" ...

答案 7 :(得分:0)

来自“java /?”的使用信息

C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC>cd "C:\Program Files (x86)\Java\jre6\bin"

C:\Program Files (x86)\Java\jre6\bin>java.exe
Usage: java [-options] class [args...]
       (to execute a class)
or  java [-options] -jar jarfile [args...]
       (to execute a jar file)

where options include:
-client       to select the "client" VM
-server       to select the "server" VM
-hotspot      is a synonym for the "client" VM  [deprecated]
              The default VM is client.

-cp <class search path of directories and zip/jar files>
-classpath <class search path of directories and zip/jar files>
              A ; separated list of directories, JAR archives,
              and ZIP archives to search for class files.

-classpath 表示您需要对多个路径使用分号(“;”)。

答案 8 :(得分:-1)

我无法测试它,但我建议如下(因为dmcgil建议分号应该是Windows上的类路径分隔符):

javac -Xlint:unchecked -classpath C:\Users\a^ b\workspace\;C:\Users\a^ b\workspace\files_to_compile

似乎是escape charachter for win shell is caret

也建议here

编辑:

另外,在你的问题中,我注意到在路径中使用斜杠(/),并不是所有版本的windows都使用反斜杠(\)作为文件分隔符?我在这个帖子的某个地方看到了你的评论,说明了这一点,所以我猜你有问题。