2017-07-31 112 views
1

我有一个罐子里面包含另一个罐子,我的目标是从全局罐子里运行这个“内部罐子”。运行从另一个罐子的罐子

我有这种方法,其检索包含在所述罐子

private static String getRealPathFromResourceName(String fileName) throws IOException { 
    ClassLoader cl = Main.class.getClassLoader(); 
    URL resource = cl.getResource(fileName); 
    String path = resource.getPath(); 
    return path; 
} 

然后我运行jar的完整路径是:

public static boolean exportFullPeriod(CheckConfiguration checkConfig) throws IOException { 
    final String cmdLine = buildExportCommandLine(checkConfig); 
    try { 
     Process process = Runtime.getRuntime().exec(cmdLine); 
     .... 
    } catch (
     ... 
} 

其中建立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来调用它?

+1

是你尝试执行依赖的jar tmp的项目吗?如果是,为什么不实际调用jar的main()? –

+0

它不是一个依赖项,我将它作为资源添加 – Max

+0

好吧。那为什么不把它作为一个库来添加呢? –

回答

2

java进程不知道如何从jar中提取jar并在内部jar中运行一个类。您将需要将其解压到外部jar运行的目录(一个动态变量)。然后根据它创建命令行并最终运行它。

所以,如果你有,有一个条目“someDir/anotherApp.jar” 首先提取物的目录,说“/u/myapps/tmp/someDir/anotherApp.jar” /u/myapps/app.jar ,然后从这里运行它。

有关如何从java打开jar(或zip)文件的信息,请参阅java.util.zip包。

,如果你没有写权限“/ U /安装MyApps的/ tmp /”,然后尝试使用从System.getProperties()

+0

感谢您的回答,这很有道理。我会和Philipp的回答一起去添加jar作为maven的依赖 – Max