简体   繁体   中英

javac unexpectedly expanding jars found in my classpath

I'm running into some curious behavior that I haven't seen before with javac and am wondering what I may be doing differently this time to cause it.

I'm compiling a relatively simple application with javac. The application depends on a handful of libraries that I refer to in the class path argument.

The after successfully compiling (albeit with some warnings that I believe are from the libs) I end up with a large amount of .class files that seem to have been extracted from the jar files in my library folder.

I've never seen javac expand my libraries like this and would like to keep it from doing this. My only hypothesis is that wildcarding in the classpath may behave differently than explicitly referring to each jar separately.

Below is the folder structure:

/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>

Here is the javac command I'm issuing from /loadtest/src

javac -classpath .;../lib/*;../lib/selenium/*;../lib/selenium/libs/* com/example/test/AdobeSSOLoadTester.java

Any ideas would be appreciated. It's obviously not a show stopper, but it is turning my simple build into an unnecessarily complicated mess. Thanks!

I don't think is a problem with javac at all, but rather with the build classpath that you have. I suspect that you have some JARs with sources in your classpath, most notably selenium-java-xyz-srcs.jar in your /loadtest/lib/selenium directory.

Since you haven't specified a -sourcepath argument in your javac invocation, the Oracle/Sun compiler will also search your user classpath for source files, as noted in the javac technote :

Standard Options

...

-cp path or -classpath path

Specify where to find user class files, and (optionally) annotation processors and source files. This classpath overrides the user class path in the CLASSPATH environment variable. If neither CLASSPATH, -cp nor -classpath is specified, the user class path consists of the current directory. See Setting the Class Path for more details.

If the -sourcepath option is not specified, the user class path is also searched for source files.

...

-sourcepath sourcepath

Specify the source code path to search for class or interface definitions. As with the user class path, source path entries are separated by semicolons (;) and can be directories, JAR archives, or ZIP archives . If packages are used, the local path name within the directory or archive must reflect the package name. Note: Classes found through the classpath may be subject to automatic recompilation if their sources are also found. See Searching For Types.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM