javac неожиданно расширяющиеся банки, найденные в моем classpath - PullRequest
2 голосов
/ 27 июля 2011

Я сталкиваюсь с каким-то любопытным поведением, которого я не видел раньше с javac, и мне интересно, что я могу делать по-другому в этот раз, чтобы вызвать его.

Я компилирую относительно простое приложение сJavac.Приложение зависит от нескольких библиотек, на которые я ссылаюсь в аргументе пути к классу.

После успешной компиляции (хотя и с некоторыми предупреждениями, которые, я считаю, взяты из библиотек), я получаю большое количество.файлы классов, которые, кажется, были извлечены из файлов jar в моей папке библиотеки.

Я никогда не видел, чтобы javac расширял свои библиотеки таким образом, и хотел бы, чтобы это не делалось.Моя единственная гипотеза заключается в том, что подстановочные знаки в пути к классам могут вести себя иначе, чем при явном обращении к каждому банку в отдельности.

Ниже приведена структура папок:

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

Вот команда javac, которую я выдаюfrom / loadtest / src

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

Любые идеи будут оценены.Это явно не шоу-стопор, но оно превращает мою простую сборку в неоправданно сложный беспорядок.Спасибо!

1 Ответ

4 голосов
/ 27 июля 2011

Я не думаю, что это вообще проблема с javac, а скорее с вашим классом пути сборки. Я подозреваю, что у вас есть несколько JAR-файлов с источниками в вашем classpath, особенно selenium-java-x.y.z-srcs.jar в вашем /loadtest/lib/selenium каталоге.

Поскольку вы не указали аргумент -sourcepath в своем вызове javac, компилятор Oracle / Sun также будет искать в вашем пользовательском пути к классам исходные файлы, как отмечено в javac technote :

Стандартные опции

...

-cp путь или -classpath путь

Укажите, где искать файлы классов пользователя, и (необязательно) обработчики аннотаций и исходные файлы. это classpath переопределяет пользовательский путь к классу в среде CLASSPATH переменная. Если не указаны ни CLASSPATH, ни -cp, ни -classpath, Путь к классу пользователя состоит из текущего каталога. См. Настройка Путь к классу для более подробной информации.

Если опция -sourcepath не указана, путь к классу пользователя будет также искал исходные файлы.

...

-sourcepath sourcepath

Укажите путь к исходному коду для поиска определения класса или интерфейса. Как и в случае с пользовательским классом, источник записи пути разделяются точкой с запятой (;) и могут содержать каталогов, JAR-архивы или ZIP-архивы . Если используются пакеты, локальный путь имя в каталоге или архиве должно отражать имя пакета. Примечание. Классы, найденные через путь к классам, могут автоматическая перекомпиляция, если их источники также найдены. Смотрите Поиск Для типов.

...