繁体   English   中英

在反应堆项目中的单个Maven构建中运行Java应用程序和Web应用程序

[英]run a java application and a web application in a single maven build within a reactor project

我有一个具有以下结构的反应堆项目

server
- pom.xml (parent) 
-- appserver (has a server socket)
-- webserver (connects to the socket in appserver and gets data)

appserver pom.xml具有运行我的Java类AppServer的main方法的maven-exec-plugin

当我在最顶层的(服务器)项目中运行目标验证时,我的构建卡在了appserver-exec目标上,并且从未继续构建/运行我的Web服务器。

理想情况下,我想先运行我的应用服务器,然后再一次安装我的网络服务器,或者验证是否在我最重要的项目上运行。

这是我的appserver pom中的exec maven插件配置。

<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId> 
<executions> 
  <execution> 
    <goals> 
      <goal>java</goal> 
    </goals> 
  </execution> 
</executions> 
<configuration> 
  <mainClass>somepackage.AppServer</mainClass> 
</configuration> 

我知道之前也曾问过许多其他类似性质的问题,并且大多数答案都围绕着使用带有antrun插件的shell脚本来进行,而几乎所有这些问题至少都存在于3/4年了,我希望以一种与平台无关的方式提供新的解决方案现在有空。

不幸的是,没有比使用maven-antrun-plugin更好的解决方案。 maven-exec-plugin可以用于启动外部进程,既可以在具有java目标的同一VM中,也可以在具有exec目标的分叉VM中启动,但是在两种情况下,它都会被阻塞; 表示插件将等待执行完成。 作为开始提到一个shell脚本的可能的方法在这里这里的工作原理以及在Linux环境。 但是,这不适用于您的情况,因为您需要支持多个环境。

通过maven-antrun-plugin ,您可以使用Exec任务并将spawn属性设置为true 这将导致Ant在后台运行任务。 示例配置为:

<plugin>
  <artifactId>maven-antrun-plugin</artifactId>
  <version>1.8</version>
  <executions>
    <execution>
      <phase> <!-- a lifecycle phase --> </phase>
      <configuration>
        <target>
          <property name="runtime_classpath" refid="maven.runtime.classpath" />
          <exec executable="java" spawn="true">
            <arg value="-classpath"/>
            <arg value="${runtime_classpath}"/>
            <arg value="somepackage.AppServer"/>
          </exec>  
        </target>
      </configuration>
      <goals>
        <goal>run</goal>
      </goals>
    </execution>
  </executions>
</plugin>

请注意,这使用maven.runtime.classpath来引用包含所有运行时依赖项的Maven类路径(有关更多信息,请参见此处 )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM