我在Stack Overflow上阅读了Sun文档和很多帖子,但我仍然对Java编译器选项-cp
和-sourcepath
之间的差异感到困惑。
假设我有这样的目录结构:
c:\Java\project1\src (where the Java source files are)
c:\Java\project1\bin (where the Java class files will be or already are)
我们还要说我在包MainClass.java
中有一个源文件com.mypackage
,并且源文件夹中的目录结构正常。
我在 project1 目录中并运行:
javac -d bin -sourcepath src src/com/mypackage/MainClass.java
或
javac -d bin -classpath src src/com/mypackage/MainClass.java
我获得了相同的结果。在详细模式下,两种情况下源文件的搜索路径均为src
。
如果有人能帮我弄清楚这些选项的具体细节,那就太好了。
答案 0 :(得分:24)
-classpath classpath
设置用户类路径,覆盖CLASSPATH环境变量中的用户类路径。如果既未指定CLASSPATH或-classpath,则用户类路径由当前目录组成。
如果未指定-sourcepath选项,则会在用户类路径中搜索源文件和类文件。
-sourcepath sourcepath
指定搜索类或接口定义的源代码路径。与用户类路径一样,源路径条目由分号(;)分隔,可以是目录,JAR存档或ZIP存档。如果使用了包,则目录或存档中的本地路径名必须反映包名称。
请注意,如果找到了源,则通过类路径找到的类会自动重新编译。
答案 1 :(得分:9)
答案 2 :(得分:4)
CLASSPATH告诉编译器和类加载器在哪里查找它需要的.class文件。
Sourcepath是我不太用的东西。我相信它是可选的,因为通常当前目录是源路径。 CLASSPATH不是。
答案 3 :(得分:2)
但是,如果未指定sourcepath,则会在类路径中搜索类文件和源文件。
这让我相信我们几乎总能通过使用classpath和完全避免sourcepath来保持简单。
需要同时使用classpath和sourcepath的人可能会针对奇怪的目录内容。例如,他们可能有一个包含源文件和类文件的文件夹,但只想搜索源文件。