2015-04-24 16 views
6

Próbuję prosty index creation w pliku JAR. Jednak nie jest on z:Dodaj indeks do pliku JAR, odwołując się do zewnętrznego pliku JAR

$ jar -i /tmp/vtk-dicom/bin/lib/vtkdicom.jar 
java.io.FileNotFoundException: /tmp/vtk-dicom/bin/lib/vtk.jar (No such file or directory) 
    at java.util.zip.ZipFile.open(Native Method) 
    at java.util.zip.ZipFile.<init>(ZipFile.java:215) 
    at java.util.zip.ZipFile.<init>(ZipFile.java:145) 
    at java.util.jar.JarFile.<init>(JarFile.java:154) 
    at java.util.jar.JarFile.<init>(JarFile.java:91) 
    at sun.tools.jar.Main.getJarPath(Main.java:1052) 
    at sun.tools.jar.Main.getJarPath(Main.java:1068) 
    at sun.tools.jar.Main.genIndex(Main.java:1084) 
    at sun.tools.jar.Main.run(Main.java:269) 
    at sun.tools.jar.Main.main(Main.java:1177) 

Na oczywistej obejście jest prosta:

$ cp /usr/share/java/vtk.jar /tmp/vtk-dicom/bin/lib/ 

Jednak to jest brzydkie i błędów. Czy jest jakiś inny sposób, aby powiedzieć jar -i gdzie szukać innej lokalizacji ? Potrzebuję przenośnego rozwiązania, które działa w systemie Windows/Linux/MacOSX.

uzyskać informacje manifest jest ustawiony na:

$ cat ./Source/java/manifest.txt 
Class-Path: vtk.jar 

o udzielenie informacji, czy ja go zmienić na:

$ cat ./Source/java/manifest.txt 
Class-Path: /usr/share/java/vtk.jar 

To daje nieco inny błąd:

$ jar -i /tmp/vtk-dicom/bin/lib/vtkdicom.jar 
java.io.FileNotFoundException: /tmp/vtk-dicom/bin/lib/usr/share/java/vtk.jar (No such file or directory) 
    at java.util.zip.ZipFile.open(Native Method) 
    at java.util.zip.ZipFile.<init>(ZipFile.java:215) 
    at java.util.zip.ZipFile.<init>(ZipFile.java:145) 
    at java.util.jar.JarFile.<init>(JarFile.java:154) 
    at java.util.jar.JarFile.<init>(JarFile.java:91) 
    at sun.tools.jar.Main.getJarPath(Main.java:1052) 
    at sun.tools.jar.Main.getJarPath(Main.java:1068) 
    at sun.tools.jar.Main.genIndex(Main.java:1084) 
    at sun.tools.jar.Main.run(Main.java:269) 
    at sun.tools.jar.Main.main(Main.java:1177) 

Dla numer:

$ java -version 
java version "1.7.0_75" 
OpenJDK Runtime Environment (IcedTea 2.5.4) (7u75-2.5.4-2) 
OpenJDK 64-Bit Server VM (build 24.75-b04, mixed mode) 
+0

Proszę umieścić zawartość pliku MANIFEST –

Odpowiedz

1

nie znalazłem żadnej dokumentacji na ten temat, ale wydaje się działać, jeśli podasz inne słoiki po głównym słoika:

jar -i main.jar other.jar 

Dla Twojej przykład:

cd /tmp/vtk-dicom/bin/lib/ 
jar -i vtkdicom.jar /usr/share/java/vtk.jar 

Inny Pliki jar nie są modyfikowane. Do manifestu nie są potrzebne żadne zmiany.

Edit:

Wygenerowany plik INDEX.LIST zawiera pełną ścieżkę określoną dla „main.jar”, ​​więc mam zmodyfikowano moim przykładem „CD” do katalogu pierwszy. W przeciwnym razie plik jar może nie działać po zainstalowaniu w ostatecznej lokalizacji.

Alternatywnie, plik "jar -i" można uruchomić na pliku po jego zainstalowaniu.

-1

Najpierw należy określić w pliku MANIFEST ścieżkę klasy dla tego pliku JAR. Opcja i służy wyłącznie do tworzenia pliku INDEX.LIST, który zoptymalizuje ładowanie klas.

Musisz więc wprowadzić swój MANIFEST całą ścieżkę do JAR.

Powiązane problemy