我有一个包含另一个jar的jar,我的目标是运行这个"在jar"来自全球的jar。
我有这个方法可以检索jar中包含的jar的完整路径
private static String getRealPathFromResourceName(String fileName) throws IOException {
ClassLoader cl = Main.class.getClassLoader();
URL resource = cl.getResource(fileName);
String path = resource.getPath();
return path;
}
然后我运行:
public static boolean exportFullPeriod(CheckConfiguration checkConfig) throws IOException {
final String cmdLine = buildExportCommandLine(checkConfig);
try {
Process process = Runtime.getRuntime().exec(cmdLine);
....
} catch (
...
}
其中build exportCommandLine使用前面的方法构建完整的命令行,完整输出为:
java -jar file:/C:/Users/xxx/target/module-backup-1.0.jar!/export-1.1.jar -dbUrl jdbc:mysql://localhost:3306/test -dbPassword test -dbUser test
我得到的错误是以下
Error: Unable to access jarfile file:/C:/Users/xxx/target/module-backup-1.0.jar!/export-1.1.jar
如何引用jar中的jar来调用它?
答案 0 :(得分:2)
java进程不知道如何从jar中提取jar并在内部jar中运行类。您需要将其解压缩到运行外部jar的目录(动态变量)。然后根据它创建命令行,最后运行它。
所以如果你有/u/myapps/app.jar有一个条目“someDir / anotherApp.jar” 首先将其提取到目录,例如“/u/myapps/tmp/someDir/anotherApp.jar”,然后从此处运行。
请参阅java.util.zip包,了解如何从java打开jar(或zip)文件。
如果你没有“/ u / myapps / tmp /”的写权限,那么尝试使用System.getProperties()中的tmp条目