Ответ 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 вам нужно предпринять.