可能的答案1:
的谷歌關閉編譯器接受多個輸入文件有這樣的語法:
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
可能環比(對)參數的代碼,並呼籲java -jar --js=xxx --js_output_file=yyy
反覆,等待每個開始下一個之前完成。這將會有不會同時啓動每個進程的好處,所以至少您不會有(可能)多個JVM同時運行。儘管每次運行都必須重新啓動JVM,但確實存在一些低效率問題。
可能的答案3:
如果你真的只想要一個JVM,那麼有沒有辦法做到你的要求,而無需編寫Java代碼一點點(據我所知) 。如果您熟悉Java,則可以複製CommandLineRunner.java的源代碼並對其進行修改以適合您的需求。或者也許更容易,只需編寫一個小型的Java類,它的main
函數只需簡單地調用CommandLineRunner
主函數,傳遞適當的參數來模擬正常的命令行調用。這裏的東西快速和骯髒的,會做的伎倆(hat tip 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); }
}
}
與這樣的編譯:
java -classpath .:compiler.jar MyRunner in1.js out1.js in2.js out2.js ...
和:
javac -classpath compiler.jar MyRunner.java
像這樣的東西來看,它看到這樣的輸出:
Compiling in1.js into out1.js...
Finished with status: 0
Compiling in2.js into out2.js...
Finished with status: 0
來源
2012-05-25 18:47:15
csd
另外:這正是那種有意義的情況,而不是使用'shell = True',因爲這樣你就不用擔心引用文件名了。 –
@ThomasK,謝謝,只是不寫在popen參數列表我用1字符串和Shell參數 – Sergey