Плохое предупреждение пути, куда это прибывает из?

25
задан Yishai 27 August 2009 в 22:58
поделиться

3 ответа

Я думаю, что @Yishai имеет на это право (я дам ему голос, чтобы он сдвинулся с мертвой точки). Я постоянно с этим сталкиваюсь. Я считаю, что это ужасное решение для языка Java, они решили, что можно разрешить настройкам пути к классам входить в файлы МАНИФЕСТА внутри файлов jar. По сути, в Jars могут быть файлы, которые указывают на другие классы и jar-файлы, расположенные в другом месте, и когда эти другие вещи, на которые они указывают, не существуют, вы видите предупреждения, подобные тем, которые вы получаете. Эти предупреждения исходят из файлов 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, вы должны найти эти файлы манифеста и убедиться, что они не вмешиваются в classpath способом, о котором вы не знаете.

Вероятно, вам придется просмотреть кучу файлов jar, поэтому я обычно использую цикл оболочки, чтобы помочь мне просмотреть их. Вы можете скопировать все ваши Jar-файлы во временный каталог и запустить такой цикл (синтаксис 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 есть настройки пути к классам. Таким образом, можно надеяться, что вы сможете выяснить, над какими Jar-файлами нужно действовать.

30
ответ дан 28 November 2019 в 20:33
поделиться

According to this, the issue is that in third party jars there is a reference to these in the manifest. The message can be disabled by adding -Xlint:-path to the compilation parameters.

27
ответ дан 28 November 2019 в 20:33
поделиться

Проверяли ли вы места, где устанавливается переменная среды CLASSPATH и параметр компиляции?

0
ответ дан 28 November 2019 в 20:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: