2015-09-29 41 views
0

在我的項目中,Tomcat正在部署一個WAR文件。該WAR文件試圖在另一個項目運行Maven:tomcat無法用processbuilder啓動外部進程

List<String> args = new ArrayList<String>(); 
args.add("mvn"); 
for (String goal : goals) { 
    args.add(goal);   
    //Here, goals is { "clean", "compile", "test", "dependency:copy-dependencies" } 
} 

ProcessBuilder processBuilder = new ProcessBuilder(args).directory(workingDir); 
processBuilder.redirectErrorStream(); 
Process process = processBuilder.start(); 

然而,Tomcat的不能運行Maven,並給這個錯誤:

java.io.IOException: Cannot run program "mvn" (in directory "C:/..."): CreateProcess error=2, The system cannot find the file specified 

我是新來的Tomcat和Maven,但我m很確定我有JAVA_HOME,CATALINA_HOME,MAVEN_HOME都正確設置到了它們的bin文件夾中,並且也添加到了PATH中。我沒有使用任何IDE,只是使用cmd和瀏覽器。

Tomcat中是否存在某種不允許其運行外部進程的配置?這可以改變嗎?

感謝您的幫助!

+1

你可以在命令行上運行mvn嗎? 'mvn -version'的輸出是什麼? – Tunaki

+0

自從您將Maven添加到PATH後,您是否重新啓動了IDE? – Atuos

+0

maven工作正常。是的,我已重新啓動。只是Tomcat沒有啓動這個過程。 – amrita

回答

0

我認爲mvn可能不是一個可以運行的命令,你的進程應該是cmd \c mvn,它實際上告訴Java啓動命令終端並指示命令終端運行maven。

對於可移植性原因,你應該看到這個問題:How to run maven from java?

通過使用可移植的API,你可以得到平臺的獨立性,並離開了笨重的子進程處理。

+0

cmd \ c mvn給出相同的錯誤。但是,如果我嘗試了這個問題中提到的任何方法,我將如何指定workingDir? – amrita