2017-09-06 97 views
1

我已經構建了一個Java Web應用程序,該應用程序從窗體接收URL,並使用命令行中的本地Maven安裝對這些URL執行TestNG測試。我的測試類在src/main/java中,這不是常規的,但是由於我的測試是在構建之後運行的,所以我將它們移動到了那裏。Maven Invoker在Tomcat服務器上找不到MAVEN_HOME環境變量

當我在Eclipse的Tomcat中使用我的servlet中的Maven invoker時,我的測試運行時沒有問題,並在我的Web應用程序中提供輸出結果。我遇到的問題是,當我將應用程序導出爲.war文件並將其放入Windows機器上本地Tomcat服務器的webapps文件夾中時,找不到本地Maven安裝。

HTTP Status 500 - Maven application directory was not specified, and ${maven.home} is not provided in the system properties. Please specify at least on of these. 

...

java.lang.IllegalStateException: Maven application directory was not specified, and ${maven.home} is not provided in the system properties. Please specify at least on of these. 
    org.apache.maven.shared.invoker.MavenCommandLineBuilder.checkRequiredState(MavenCommandLineBuilder.java:127) 
    org.apache.maven.shared.invoker.MavenCommandLineBuilder.build(MavenCommandLineBuilder.java:62) 
    org.apache.maven.shared.invoker.DefaultInvoker.execute(DefaultInvoker.java:100) 
    com.xxxxx.qa.servlets.RunTestServlet.doPost(RunTestServlet.java:104) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:650) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 

這裏是Maven的調用程序的代碼,我使用:

InvocationRequest invocationRequest = new DefaultInvocationRequest(); 
invocationRequest.setPomFile(new File("pom.xml")); 
invocationRequest.setGoals(Collections.singletonList("test surefire-report:report " + formatTest)); 
Invoker invoker = new DefaultInvoker(); 
invoker.setMavenHome(new File(System.getenv("MAVEN_HOME")));       
InvocationResult result = invoker.execute(invocationRequest); 

我已經運行在命令行命令Maven的任何問題,並正確添加我的Maven目錄到我的MAVEN_HOME環境變量。

我嘗試了一些這個網頁上所提供的答案,但沒有任何成功 - Maven Invoker: IllegalStateException

我也試過在Tomcat的家裏跑在Tomcat setevn.bat批處理文件/ bin中:

set "maven.home=C:\XXXXX\XXXXX\apache-maven-3.5.0-bin\apache-maven-3.5.0" 

...

set "MAVEN_HOME=C:\XXXXX\XXXXX\apache-maven-3.5.0-bin\apache-maven-3.5.0" 

任何想法?

+0

你想實現一個maven插件嗎?還是這些測試是一種集成測試? Tomcat在這裏扮演的角色是什麼? – khmarbaise

回答

0

查看關於如何設置Environment variables for java installation(或其他)的答案。

您不需要Maven來運行TestNG,請參閱run TestNg programmatically

+0

以編程方式運行TestNG是一個很好的解決方案,實際上它比從我所看到的調用Maven更好。我仍然覺得很奇怪,我無法訪問MAVEN_HOME環境變量。正如我已經提到的,我已經爲此設置了環境變量,並且從命令行運行Maven時沒有問題。 – Omar

+0

看起來經過一些測試,以編程方式運行TestNg在Eclipse的Tomcat中爲我工作,但不能在我的本地Tomcat上工作,所以這對我來說並沒有解決。 – Omar