2012-06-05 46 views
8

我需要從Maven運行一個服務器(在Java類中實現),但如果使用exec:java目標,它將阻塞maven,並且它不會傳遞到連接到服務器的下一個階段。從maven運行java服務器

有什麼辦法可以在不中斷Maven執行的情況下異步運行exec:java任務嗎?

謝謝!

+0

對於尋找最近解決方案的其他人,請嘗試https://github.com/bazaarvoice/maven-process-plugin –

回答

5

你可以使用exec-maven-plugin來運行shell腳本,它可以啓動你的進程,並從進程中分離(讓進程在後臺運行)。事情是這樣的:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>exec-maven-plugin</artifactId> 
    <executions> 
     <execution> 
     <id>start-server</id> 
     <phase>pre-integration-test</phase> 
     <goals> 
      <goal>exec</goal> 
     </goals> 
     <configuration> 
      <executable>src/test/scripts/run.sh</executable> 
      <arguments> 
      <argument>{server.home}/bin/server</argument> 
      </arguments> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 

凡run.sh可能是這樣的(對於U * nix的平臺):

#! /bin/sh 
$* > /dev/null 2>&1 & 
exit 0 

這應該做的伎倆。

0

看起來你可以用antrun插件做到這一點:

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-antrun-plugin</artifactId> 
      <version>1.3</version> 
      <configuration> 
       <tasks> 
        <java fork="true" spawn="true" classpathref="maven.runtime.classpath" className="fully.qualified.package.App"/> 
       </tasks> 
      </configuration> 
     </plugin> 
0

如果你才能運行在你的Maven POM進一步整合測試步驟運行此服務器類,那麼它實際上是更好的考慮使用持續集成工具(如Jenkins),它有很多Plugins,它允許您運行自己的類,啓動和停止服務器,部署應用程序以及許多其他可能性,而且它是免費的。