Maven Invoker在Tomcat服务器上找不到MAVEN_HOME环境变量

时间:2017-09-06 20:46:06

标签: java eclipse maven tomcat maven-invoker-plugin

我构建了一个Java Web应用程序,它从表单接收URL并使用命令行中的本地Maven安装对这些URL执行TestNG测试。我的测试类在src / main / java中,这不是常规的,但由于我的测试是在我的构建之后运行的,所以我将它们移到那里。

当我在Eclipse的Tomcat中使用来自我的servlet的Maven调用者时,我的测试运行没有问题,并在我的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 Invoker代码:

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-Home / bin中运行Tomcat setevn.bat批处理文件:

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"

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

请参阅此答案,了解如何设置Environment variables for java installation(或其他任何内容)。

您不需要Maven运行TestNG,请参阅run TestNg programmatically

答案 1 :(得分:0)

尝试替换

invoker.setMavenHome(new File(System.getenv("MAVEN_HOME"))) 

invoker.setMavenHome(new File(System.getenv().get("MAVEN_HOME")))