2015-04-24 3 views
6

Я пытаюсь создать простой файл index creation в файле jar. Однако он терпит неудачу с:Добавить индекс в файл jar, ссылаясь на внешний файл 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) 

На очевидном Обходной просто:

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

Однако это некрасиво и подвержен ошибкам. Есть ли другой способ, который я могу сказать jar -i, где искать другое местоположение vtk.jar? Мне понадобится портативное решение, которое работает в Windows/Linux/MacOSX.

Для информации манифеста устанавливается на:

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

Для информации, если я изменить его на:

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

Это дает несколько иную ошибку:

$ 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) 

Для ссылка:

$ 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

Пожалуйста, разместите содержание вашего файла MANIFEST –

ответ

1

Я не нашел никаких документов по этому поводу, но это, кажется, работает, если вы предоставите другие банки после основного кувшина:

jar -i main.jar other.jar 

Для примера:

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

Другой Файлы jar не изменяются. Для манифеста не требуется никаких изменений.

Edit:

Сформированный INDEX.LIST файл содержит полный путь, который вы укажете для «main.jar», поэтому я изменил мой пример «CD» в каталог первой. В противном случае файл jar может не работать после его установки в конечном месте.

В качестве альтернативы, «jar -i» может быть запущен в файле после его установки.

-1

Сначала вам нужно указать в файле MANIFEST Class-Path для этого JAR. Опция i предназначена только для создания файла INDEX.LIST, который оптимизирует загрузку классов.

Итак, вам нужно вставить свой МАНИФЕСТ весь путь в JAR.

Смежные вопросы