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