我遇到了一些我以前从未见过的javac好奇的行为,我想知道这次我可能采取的不同做法是什么。
我正在用javac编译一个相对简单的应用程序。该应用程序依赖于我在类路径参数中引用的一些库。
成功编译之后(尽管有一些我认为来自libs的警告)我最终得到了大量的.class文件,这些文件似乎是从我的库文件夹中的jar文件中提取的。
我从未见过javac像这样扩展我的库,并希望不让它这样做。我唯一的假设是类路径中的通配符可能与单独明确引用每个jar的行为不同。
以下是文件夹结构:
/loadtest
/loadtest/lib
/loadtest/lib/selenium
<some jars here>
/loadtest/lib/selenium/libs
<some jars here>
/loadtest/src
/loadtest/src/com/example/test
<my java files here>
这是我从/ loadtest / src发出的javac命令
javac -classpath .;../lib/*;../lib/selenium/*;../lib/selenium/libs/* com/example/test/AdobeSSOLoadTester.java
任何想法都将不胜感激。它显然不是一个显示塞子,但它正在将我的简单构建变成一个不必要的复杂混乱。谢谢!
答案 0 :(得分:4)
我认为javac
根本不存在问题,而是使用您拥有的构建类路径。我怀疑你的类路径中有一些带有源代码的JAR,最明显的是selenium-java-x.y.z-srcs.jar
目录中的/loadtest/lib/selenium
。
由于您未在-sourcepath
调用中指定javac
参数,因此Oracle / Sun编译器还将在您的用户类路径中搜索源文件,如javac
technote中所述:
标准选项
...
-cp path或-classpath path
指定查找用户类文件的位置, 和(可选)注释处理器和源文件。这个 classpath覆盖CLASSPATH环境中的用户类路径 变量。如果既未指定CLASSPATH,-cp也未指定-classpath,则 用户类路径由当前目录组成。请参阅设置 类路径了解更多详情。
如果未指定-sourcepath选项,则用户类路径为 还搜索了源文件。
...
-sourcepath sourcepath
指定要搜索的源代码路径 类或接口定义。与用户类路径一样,源 路径条目由分号(;)分隔,可以是目录, JAR档案或ZIP档案。如果使用包,则使用本地路径 目录或存档中的名称必须反映包名称。 注意:通过类路径找到的类可能受到限制 如果还找到了源,则自动重新编译。请参阅搜索 对于类型。