添加索引到 jar 文件,引用外部 jar 文件
Add index to jar file, referencing external jar file
我正在对 jar 文件尝试一个简单的 index creation。但是它失败了:
$ 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)
首先,您需要在 MANIFEST 文件中指定该 JAR 的 Class-Path。
选项 i 仅用于创建一个 INDEX.LIST 文件,该文件将优化 类.
的加载
因此您需要将 JAR 的完整路径放入您的 MANIFEST 中。
我还没有找到关于此的任何文档,但如果您在主 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 文件尝试一个简单的 index creation。但是它失败了:
$ 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)
首先,您需要在 MANIFEST 文件中指定该 JAR 的 Class-Path。 选项 i 仅用于创建一个 INDEX.LIST 文件,该文件将优化 类.
的加载因此您需要将 JAR 的完整路径放入您的 MANIFEST 中。
我还没有找到关于此的任何文档,但如果您在主 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" 可以在安装后 运行 在文件上。