javac意外地扩展了我的类路径中发现的jar

时间:2011-07-27 14:23:25

标签: java classpath javac

我遇到了一些我以前从未见过的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

任何想法都将不胜感激。它显然不是一个显示塞子,但它正在将我的简单构建变成一个不必要的复杂混乱。谢谢!

1 个答案:

答案 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档案。如果使用包,则使用本地路径   目录或存档中的名称必须反映包名称。   注意:通过类路径找到的类可能受到限制   如果还找到了源,则自动重新编译。请参阅搜索   对于类型。