0
My JavaはProcessBuilderを使用して、リソースに追加した他のjarを使用していくつかのコマンドを実行します。ProcessBuilderがパッケージ化されたjarのjava -jarの呼び出しで失敗する
それはEclipseで正常に動作しますが、私は、実行可能jarファイルにエクスポートたら、それは動作しません:
//Defs Class has this line
public final static String APKTOOLS_JAR_PATH = Defs.class.getResource("/apktool.jar").getPath();
ProcessBuilder pb = new ProcessBuilder("java", "-jar", Defs.APKTOOLS_JAR_PATH, "d", apkPath, "-o", decodePath, "-f");
pb.redirectError(Redirect.INHERIT);
Process p = pb.start();
私は戻って取得:
Error: Unable to access jarfile apktool.jar
apktool.jarが実際にどこ権利ではないかもしれないことを行う必要がありますそれが必要です。主なものの隣に置こうとしますか? –
ちょうどここで推測しますが、getResource行の先頭の "/"はおそらくそれを削除しますか? (絶対パス名と相対パスを使用します)。 – FreudianSlip
URL **のgetPath()メソッドは、URLを有効なファイル名に変換しません**。代わりに 'Paths.get(Defs.class.getResource("/apktool.jar ")。toURI())。toString()'を使用してください。 .jarから実行すると、.jarのリソースはまったく別のファイルではないので、これは失敗します。その場合は、.jarからコピーする必要があります。 [一時ファイル](http://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#createTempFile-java.lang.String-java.lang)にコピーすることをお勧めします。 .String-java.nio.file.attribute.FileAttribute ...-)。 – VGR