【问题标题】:Maven Invoker cannot find MAVEN_HOME environment variable on Tomcat serverMaven Invoker 在 Tomcat 服务器上找不到 MAVEN_HOME 环境变量
【发布时间】:2017-09-06 20:46:06
【问题描述】:

我已经构建了一个 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"

有什么想法吗?

【问题讨论】:

  • 您是否正在尝试实现一个 maven 插件?或者这些测试是一种集成测试?而Tomcat在这里的作用是什么?

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


【解决方案1】:

有关如何设置Environment variables for java installation(或其他任何内容)的信息,请参阅此答案。

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

【讨论】:

  • 以编程方式运行 TestNG 是一个很好的变通解决方案,实际上比我所看到的调用 Maven 更好。我仍然觉得奇怪的是我无法访问 MAVEN_HOME 环境变量。正如我已经指出的,我已经为此设置了环境变量,并且从命令行运行 Maven 没有任何问题。
  • 似乎经过一些测试,以编程方式运行 TestNg 在 Eclipse 的 Tomcat 中对我有用,但在我的本地 Tomcat 上不起作用,所以这对我来说没有解决。
【解决方案2】:

尝试替换

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-21
    • 1970-01-01
    • 2018-09-03
    • 2015-04-18
    • 1970-01-01
    • 2011-04-22
    • 1970-01-01
    相关资源
    最近更新 更多