2009-08-27 12 views
21

Kiedy skompilować mój projekt z ostrzeżeń kompilatora (JDK 1.5) mam kilka złych ostrzeżeń element ścieżki:Złe ostrzeżenie o ścieżce, skąd się bierze?

Ostrzeżenie :: [ścieżka] zły element ścieżki „C: \ Users \ User \ myjava \ common \ lib \ junit.jar ": brak takiego pliku lub katalogu Ostrzeżenie: [ścieżka] błędna ścieżka elementu" C: \ Users \ User \ MyJava \ common \ lib \ jdom.jar ": brak takiego pliku lub katalogu Ostrzeżenie :: [ ścieżka] zły element ścieżki "C: \ Users \ User \ MyJava \ common \ lib \ xerces.jar": brak takiego pliku lub katalogu Ostrzeżenie: [ścieżka] błędna ścieżka elementu "C: \ Users \ User \ MyJava \ common \ lib \ xml-apis.jar ": brak takiego pliku lub katalogu

i wiele innych.

To wykorzystuje IDEA 8.1.3. Nie mogę znaleźć nigdzie w konfiguracji IDEA (porzuciłem cały projekt), gdzie wszystko wskazuje na te pliki. W rzeczywistości nie ma ich już pod tym imieniem, ale co je łączy?

Odpowiedz

26

Myślę, że @Yaiai ma do tego prawo (oddam mu głos w górę, aby uzyskać przewalcowanie piłki). Wpadam na to cały czas. Wydaje mi się, że była to okropna decyzja dla języka Java. Postanowili, że będzie w porządku, aby ustawienia ścieżek klasu znalazły się w plikach MANIFEST w plikach jar. Zasadniczo, słoiki mogą zawierać pliki wewnątrz nich, które wskazują inne klasy i słoiki zlokalizowane gdzie indziej, a kiedy te inne rzeczy, o których mowa, nie istnieją, widzisz ostrzeżenia takie jak te, które dostajesz. Ostrzeżenia te pochodzą z plików Jar znajdujących się w ścieżce klas kompilacji. Tak więc, jeśli naprawdę zależy Ci na śledzeniu problemów z plikami jar, wyodrębnij zawartość plików jar, usuń ustawienia "Class-Path" w ich plikach manifestu i odtwórz je. Coś w tym stylu (najpierw przenieś słoik do katalogu tymczasowego):

#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 ./* 

To powinno wystarczyć!

Nie sądzę, że chcesz po prostu zignorować te wiadomości, ponieważ jeśli chcesz mieć pełną kontrolę nad tym, co dzieje się na ścieżce klas, powinieneś wyszukać te pliki manifestu i upewnić się, że nie robią bałaganu o którym nie wiesz.

Prawdopodobnie będziesz musiał przejrzeć całą masę plików jar, więc zwykle używam pętli powłoki, aby pomóc mi je przejrzeć. Można skopiować wszystkie słoików pytanie do katalogu tymczasowego i uruchomić pętlę tak (składni bash):

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

To wypisze nazwę każdego pliku JAR w bieżącym katalogu, wyodrębnić jego zawartość, a grep jego plik manifestu dla wpisów klasy classpath. Jeśli nazwa pliku jar na wyjściu ma wydruk "Class-Path", oznacza to, że Jar ma ustawienia classpath w swoim manifeście. W ten sposób możesz mieć nadzieję, na jakie słoiki potrzebujesz podjąć działania.

+0

Dzięki za opracowanie! – Yishai

+0

Dobry pomysł, ale zanieczyszczasz bieżący katalog zawartością JARów. –

+0

@ LawrenceDol Dlatego właśnie jest napisane: "Możesz skopiować wszystkie swoje słoiki do katalogu tymczasowego ..." –

0

Czy sprawdziłeś miejsca, w których ustawiana jest zmienna środowiskowa CLASSPATH i opcja kompilacji?

+0

Tak, oni nie są odniesione bezpośrednio przez IDEA (który zapewnia ścieżki klasy) w dowolnym miejscu. – Yishai

20

Zgodnie z this problem polega na tym, że w słoikach stron trzecich istnieje odniesienie do nich w manifeście. Komunikat można wyłączyć, dodając parametr -Xlint: -path do parametrów kompilacji.

0

Danymi elementami ścieżki są najprawdopodobniej w pliku manifestu JAR. Aby zlokalizować JAR naruszające można uruchomić ten skrypt, który będzie wyodrębnić tylko te pliki manifestu i wykazuje żadnej ścieżki klasy przyjmuje:

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 
Powiązane problemy