Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 向jar文件添加索引,引用外部jar文件_Java_Jar - Fatal编程技术网

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

Java 向jar文件添加索引,引用外部jar文件,java,jar,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

我正在尝试一个简单的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)
然而,它丑陋且容易出错。有没有其他方法可以告诉我在哪里搜索不同的
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)

首先,需要在清单文件中指定该JAR的类路径。 选项i仅用于创建INDEX.LIST文件,该文件将优化类的加载


因此,您需要将JAR的整个路径放在清单中。

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

jar -i main.jar other.jar
例如:

cd /tmp/vtk-dicom/bin/lib/
jar -i vtkdicom.jar /usr/share/java/vtk.jar
其他jar文件不会被修改。清单不需要更改

编辑:

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


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

请将清单文件的内容
jar -i main.jar other.jar
cd /tmp/vtk-dicom/bin/lib/
jar -i vtkdicom.jar /usr/share/java/vtk.jar