Подтвердить что ты не робот

Предупреждение о плохом пути, откуда оно взялось?

Когда я компилирую свой проект с помощью предупреждений компилятора (JDK 1.5), я получаю кучу предупреждений о неправильном пути:

Предупреждение:: [путь] плохой элемент пути "C:\Users\Пользователь\MyJava\common\lib\junit.jar": нет такого файла или каталога Warning:: [path] bad path element "C:\Users\User\MyJava\common\lib\jdom.jar": нет такого файла или каталога Warning:: [path] bad path element "C:\Users\User\MyJava\common\lib\xerces.jar": нет такого файла или каталога Warning:: [path] bad path element "C:\Users\User\MyJava\common\lib\xml-apis.jar": нет такого файла или каталога

и многие другие.

Это использует IDEA 8.1.3. Я не могу найти нигде в конфигурации IDEA (я grepped весь проект), где что-то указывает на эти файлы. Все они действительно не существуют под этим именем, но что их называет?

4b9b3361

Ответ 1

Я думаю, что у @Yishai есть право на это (я дам ему голосование за то, что он запустил мяч). Я сталкиваюсь с этим все время. В том, что, по моему мнению, было ужасным решением для языка Java, они решили, что было бы неплохо позволить параметрам classpath перейти в файлы MANIFEST внутри файлов jar. По сути, у Jars могут быть файлы внутри них, которые указывают на другие классы и банки, расположенные где-то в другом месте, и когда эти другие вещи, на которые они указывают, не существуют, вы видите предупреждения, подобные тем, которые вы получаете. Эти предупреждения выходят из файлов Jar, которые находятся в вашем пути к классу компиляции. Итак, что вам нужно сделать, если вам действительно интересно, это отследить файлы jar проблемы, извлечь содержимое файлов jar, удалить настройки "Class-Path" в своих файлах манифеста и воссоздать их. Что-то вроде этого (сначала переместите банку в временную директорию):

#Extract the jar file
jar xvf myfile.jar
rm myfile.jar
emacs ./META-INF/MANIFEST.MF

*Find the entry "Class-path:" and remove it completely and save the changes

#Rebuild the jar file
jar cvf myfile.jar ./*

Это должно сделать трюк!

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

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

for i in *.jar; do echo $i; jar xf $i; grep -i 'class-path' ./META-INF/MANIFEST.MF; done

Это будет печатать имя каждого файла Jar в текущем каталоге, извлекать его содержимое и grep его файл манифеста для записей класса. Если имя файла jar на выходе имеет после него распечатку "Class-Path", это означает, что Jar имеет параметры pathpath в своем манифесте. Таким образом, вы можете надеяться выяснить, какие Jars вам нужно предпринять.

Ответ 2

Согласно this, проблема в том, что в сторонних банках есть ссылка на них в манифесте. Сообщение можно отключить, добавив -Xlint: -path к параметрам компиляции.

Ответ 3

Вы проверили места, в которых установлена ​​ваша переменная среды CLASSPATH и параметр компиляции?

Ответ 4

Элементы пути, о которых идет речь, скорее всего, находятся в файле манифеста JAR. Чтобы найти неисправный JAR, вы можете запустить эту оболочку script, которая будет извлекать только файлы манифеста и показывать любой путь к ней:

for i in *.jar; do echo $i; /path/to/your/jdk/bin/jar xf $i META-INF/MANIFEST.MF; grep -i 'class-path' META-INF/MANIFEST.MF; done