我正在尝试围绕可运行的 .jar 文件创建一个包装器,以便为 JVM 传递参数。我的包装器的相关代码是:
public static void main(String[] args) throws IOException
String[] cmdArray = {"java",
System.getProperty("os.arch").contains("64") ? "-d64" : "",
"-XX:+AggressiveHeap",
"-jar",
"/lib/A.jar" //replace with jar name
};
Runtime.getRuntime().exec(cmdArray);
}
A.jar 文件是我的 Wrapper 项目中的一个引用库(在构建路径和类路径中添加)。例子:
Wrap
>src
>org
>Wrapper.java
>lib
>A.jar
当我从 Wrapper 项目(我们称之为 B.jar)创建第二个 jar 文件时,它的内容是
lib
>A.jar
org
>eclipse
>jdt
>... (i.e., all the files for the jarinjarloader)
>Wrapper.class
META-INF
>MANIFEST.MF
我来自第二个 jar 的清单文件如下所示:
Manifest-Version: 1.0
Rsrc-Class-Path: lib/A.jar
Class-Path: .
Rsrc-Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader
Main-Class: org.Wrapper
当我启动 B.jar 文件时,它显示进程已启动,但未调用/启动 A.jar 文件。没有错误,没有例外。该过程开始和终止。尝试通过命令行启动它并双击。
如果我将 MANIFEST.MF 文件修改为
Rsrc-Class-Path: A.jar
以及 Wrapper.java 的 main 方法中的 cmdArray 中的元素
"/lib/A.jar" to "A.jar"
我在我的包装 jar 所在的文件夹(例如,B.jar)中制作了 A.jar 的副本,它完美启动,调用了第二个 jar。我究竟做错了什么?我想如何将类路径传递给内部 jar 文件?任何帮助,将不胜感激。