Java .jar文件中的路径有问题

Java .jar文件中的路径有问题,java,jar,Java,Jar,我想调用Java应用程序中文件夹中的编译器(非标准)。所以我写了这段代码: Process p = Runtime.getRuntime().exec("closures/bin/javac " + filename); 成功了! 但是现在我想把这个编译器和我的.class文件打包成一个.jar文件。我的文件夹结构如下所示: .class(很多类) 闭包/(文件夹) 但当执行jar文件中的上述行(对子文件夹中编译器的调用)时,我得到了以下结果: Exception in thread "m

我想调用Java应用程序中文件夹中的编译器(非标准)。所以我写了这段代码:

Process p = Runtime.getRuntime().exec("closures/bin/javac " + filename);
成功了! 但是现在我想把这个编译器和我的.class文件打包成一个.jar文件。我的文件夹结构如下所示:

  • .class(很多类)

  • 闭包/(文件夹)

但当执行jar文件中的上述行(对子文件夹中编译器的调用)时,我得到了以下结果:

Exception in thread "main" java.io.IOException: Cannot run program "closures/bin/javac": java.io.IOException: error=2, No such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:475)
at java.lang.Runtime.exec(Runtime.java:610)
at java.lang.Runtime.exec(Runtime.java:448)
at java.lang.Runtime.exec(Runtime.java:345)
at Main.main(Main.java:44)

Caused by: java.io.IOException: java.io.IOException: error=2, No such file or directory
at java.lang.UNIXProcess.<init>(UNIXProcess.java:164)
at java.lang.ProcessImpl.start(ProcessImpl.java:81)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:468)
... 4 more
线程“main”java.io.IOException中的异常:无法运行程序“closures/bin/javac”:java.io.IOException:error=2,没有这样的文件或目录 位于java.lang.ProcessBuilder.start(ProcessBuilder.java:475) 位于java.lang.Runtime.exec(Runtime.java:610) 位于java.lang.Runtime.exec(Runtime.java:448) 位于java.lang.Runtime.exec(Runtime.java:345) Main.Main(Main.java:44) 原因:java.io.IOException:java.io.IOException:error=2,没有这样的文件或目录 位于java.lang.UNIXProcess(UNIXProcess.java:164) 在java.lang.ProcessImpl.start(ProcessImpl.java:81) 位于java.lang.ProcessBuilder.start(ProcessBuilder.java:468) ... 4更多 在我看来,这似乎是一个路径问题

我做错了什么


谢谢。

仅从您模糊的描述来看,为什么您认为您的应用程序的pwd与Closes所在的文件夹相同?在我看来,您是从.class运行它的,所以您可能至少需要

Process p = Runtime.getRuntime().exec("../closures/bin/javac " + filename);

但这仍然不是最健壮的调用方式。

您不能在jar文件中执行可执行文件。在调用
Runtime.getRuntime().exec()
之前,必须先提取它

再想想,
Runtime.getRuntime().exec()
使用操作系统的功能。您的操作系统不知道
.jar
文件。你必须把它提取出来