java - 添加索引到 jar 文件,引用外部 jar 文件

标签 java jar

我正在尝试一个简单的 index creation在一个 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 的可移植解决方案。

有关信息, list 设置为:

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

最佳答案

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

jar -i main.jar other.jar

以你的例子为例:

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

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

编辑:

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

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

关于java - 添加索引到 jar 文件,引用外部 jar 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29841830/

相关文章:

java - 使用 java 从 Payment Gateway 重定向时,我丢失了 session 数据

java - 使用 Hibernate 和 Spring Data JPA 激活 SQL 语句日志记录

java - 在 lambda 表达式中使用 Double.intValue() 后的 ClassCastExcpetion

java - Bean创建异常: autowired dependencies failed with another maven spring project

java - 使用 ColdFusion 访问 Jar 文件类和方法

java - 检查 jar 文件的内容

java - Log4J 2 查找值在加载/呈现之前在配置中使用

java - 如何将嵌套的 Java 8 future 转换为 Java 1.6?

java - jar 名称末尾的空格无法加载 DLL

java - gradle:无法执行 run,因为属性 "mainClass"未定义或为空