我已經構建了一個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"
任何想法?
你想實現一個maven插件嗎?還是這些測試是一種集成測試? Tomcat在這裏扮演的角色是什麼? – khmarbaise