考えられる答え1:
Googleクロージャコンパイラは、次のような構文の複数の入力ファイルを受け入れます。
java -jar compiler.jar --js=in1.js --js=in2.js ... --js_output_file=out.js
これにより、すべての入力の組み合わせである1つの出力ファイルのみが生成されます。ただし、各ファイルを個別にコンパイルしようとしている場合、これは希望どおりではない可能性があります。
考えられる答え2:
bash
パラメータのペアを受け入れる小さなラッパースクリプト( 、、、python
またはお気に入りのスクリプト言語を使用)を作成するのは難しくありません。
wrapper.sh in1.js out1.js in2.js out2.js ...
のコードはwrapper.sh
、(ペアの)パラメーターをループして繰り返し呼び出しjava -jar --js=xxx --js_output_file=yyy
、それぞれが完了するのを待ってから次のパラメーターを開始することができます。これには、各プロセスを並行して開始しないという利点があるため、少なくとも(潜在的に)多くのJVMを同時に実行することはありません。ただし、実行ごとにJVMを再起動する必要があるという非効率性があります。
考えられる答え3:
本当に1つのJVMだけが必要な場合は、Javaコードを少し書かずに(私が知る限り)要求したことを実行する方法はありません。Javaに精通している場合は、CommandLineRunner.javaのソースコードをコピーして、ニーズに合わせて変更できます。
または、さらに簡単な場合は、関数がメインを何度でもmain
呼び出すだけの小さなJavaクラスを作成し、適切なパラメーターを渡して通常のコマンドライン呼び出しをシミュレートします。CommandLineRunner
これがトリックを行う迅速で汚いものです(VonCへの帽子のヒント)
import com.google.javascript.jscomp.CommandLineRunner;
import java.security.Permission;
public class MyRunner {
public static void main(String [] args) {
// Necessary since the closure compiler calls System.exit(...).
System.setSecurityManager(new NoExitSecurityManager());
for (int i=0; i<args.length; i+=2) {
System.out.println("Compiling " + args[i] + " into " + args[i+1] + "...");
try {
CommandLineRunner.main(new String[] {
"--js=" + args[i],
"--js_output_file=" + args[i+1]
});
}
catch (ExitException ee) {
System.out.println("Finished with status: " + ee.getStatus());
}
}
}
private static class ExitException extends SecurityException {
private int status;
public ExitException(int status) { this.status = status; }
public int getStatus() { return status; }
}
private static class NoExitSecurityManager extends SecurityManager {
public void checkPermission(Permission p) { }
public void checkPermission(Permission p, Object context) { }
public void checkExit(int status) { throw new ExitException(status); }
}
}
次のようなものでコンパイルします。
javac -classpath compiler.jar MyRunner.java
次のようなもので実行します。
java -classpath .:compiler.jar MyRunner in1.js out1.js in2.js out2.js ...
そして、次のような出力を参照してください。
Compiling in1.js into out1.js...
Finished with status: 0
Compiling in2.js into out2.js...
Finished with status: 0