[英]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.