可能的答复1:
Google 关闭编译器确实接受多个输入文件,
java -jar compiler.jar --js=in1.js --js=in2.js ... --js_output_file=out.js
这将只产生一个输出文件, 即所有输入的组合。 但如果您试图将每个文件单独编译, 这可能不是您想要的 。
可能的答复2:
使用 bash
, python
, 或您最喜欢的脚本语言)写一个小包装脚本将不难, 它会接受一对参数, 例如 。
wrapper.sh in1.js out1.js in2.js out2.js ...
wrapper.sh
中的代码可以绕过( pairs of) 参数,反复调用 java -java -jar --js=xxxxx --js_output_put_file=yyyy
,等待每个进程在开始下一个进程之前完成。这将有利于不平行启动每个进程, 因此至少您不会同时( 可能) 许多 JVMs 运行。 尽管您在每次运行时重新启动 JVM 方面有些效率不高 。
可能的答复3:
如果您 really 想要一个 JVM, 那么就无法在不写写一点 Java 代码( 据我所知) 的情况下按您的要求行事。 如果您熟悉 Java 代码 。 您可以复制 < a href=" http://code.google. com/ p/clocure-compiler/ source/browse/trunk/src/ com/google/javascrip/jscomp/CommandLineRunner.java " rel = " no folfoln noreferr" > CommandLineRunner.java 的源代码, 并修改该代码以适应您的需求 。
或者也许更简单些, 只要写一个小爪哇类, 其main
函数只是引用 Command>CCommandLineRunner
的任意次数, 通过适当的参数来模拟普通命令行的引用。 这里有快速和肮脏的东西可以做这个把戏 (>> titt to 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