簡體   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