向jar文件添加索引,引用外部jar文件

mal*_*lat 6 java 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)
Run Code Online (Sandbox Code Playgroud)

明显的解决方法很简单:

$ cp /usr/share/java/vtk.jar /tmp/vtk-dicom/bin/lib/
Run Code Online (Sandbox Code Playgroud)

然而,它很丑陋且容易出错.有没有其他方法我可以告诉jar -i在哪里搜索不同的vtk.jar位置?我需要一个可在Windows/Linux/MacOSX上运行的便携式解决方案.

有关信息,清单设置为:

$ cat ./Source/java/manifest.txt
Class-Path: vtk.jar
Run Code Online (Sandbox Code Playgroud)

有关信息,如果我将其更改为:

$ cat ./Source/java/manifest.txt
Class-Path: /usr/share/java/vtk.jar
Run Code Online (Sandbox Code Playgroud)

它给出了一个稍微不同的错误:

$ 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)
Run Code Online (Sandbox Code Playgroud)

以供参考:

$ 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)
Run Code Online (Sandbox Code Playgroud)

dgo*_*bbi 1

我没有找到任何关于此的文档,但如果您在主 jar 之后提供其他 jar,它似乎可以工作:

jar -i main.jar other.jar
Run Code Online (Sandbox Code Playgroud)

对于你的例子:

cd /tmp/vtk-dicom/bin/lib/
jar -i vtkdicom.jar /usr/share/java/vtk.jar
Run Code Online (Sandbox Code Playgroud)

其他jar文件没有修改。清单无需更改。

编辑:

生成的 INDEX.LIST 文件包含您为“main.jar”指定的完整路径,因此我将示例修改为首先“cd”到该目录中。否则,jar 文件在安装到最终位置后可能无法工作。

或者,可以在安装文件后对其运行“jar -i”。