2012-11-26 231 views
0

我想用maven創建多模塊獨立應用程序。在maven中創建多模塊項目

在我的情況下,我想讓'Loader'項目(.jar)包含所有其他項目。但現在我剛纔設置的.jar文件(loader.jar,crawler1.jar ...等)

裝載機.pom

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.javanix.jmetalcrawler</groupId> 
    <artifactId>loader</artifactId> 
    <version>1.0</version> 


    <build> 
     <pluginManagement> 
      <plugins> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-compiler-plugin</artifactId> 
        <configuration> 
         <source>1.6</source> 
         <target>1.6</target> 
        </configuration> 
       </plugin> 
      </plugins> 
     </pluginManagement> 
    </build> 

</project> 

子項目的.pom

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 


    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.javanix.jmetalcrawler</groupId> 
    <artifactId>Crawler-1</artifactId> 
    <version>1.0</version> 

    <dependencies> 
     <dependency> 
      <groupId>com.javanix.jmetalcrawler</groupId> 
      <artifactId>loader</artifactId> 
      <version>1.0</version> 
     </dependency> 
    </dependencies> 

    <build> 
     <pluginManagement> 
      <plugins> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-compiler-plugin</artifactId> 
        <configuration> 
         <source>1.6</source> 
         <target>1.6</target> 
        </configuration> 
       </plugin> 
      </plugins> 
     </pluginManagement> 
    </build> 

</project> 

父母的.pom

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 

    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.javanix.jmetalcrawler</groupId> 
    <artifactId>parent</artifactId> 
    <version>1.0</version> 
    <packaging>pom</packaging> 
    <name>jMetalCrawler</name> 

    <modules> 
     <module>Crawler-1</module> 
     <module>Loader</module> 
    </modules> 


</project> 

生命週期

  1. 編譯 '裝載機'(具有接口/抽象類)
  2. 編譯/包 'crawler1'(由於它依賴於 '裝載機' 項目)
  3. 編譯/包' crawler2' (因爲它依賴於 '裝載機' 項目)
  4. 編譯包裝載機 '履帶' 項目

P.S.

  1. 感謝阿德里安深,他給了一個主意,讓我更清楚項目
  2. 重組我在「啓動」項目的項目後,我們可以通過添加maven-assembly-plugin依賴 (@see http://rombertw.wordpress.com/2010/05/14/maven-recipe-building-an-aggregate-jar/

回答

2

我建議項目的結構是這樣的:

loader (POM, multi-module) 
    + loader-api (JAR) 
    + crawler1 (JAR, depends on loader-api) 
    + crawler2 (JAR, depends on loader-api) 
    + loader-app (JAR, depends on loader-api, crawler1, crawler2. 
       The standalone app is built here) 

通過分割是爬蟲取決於API和應用程序本身,整個項目的結構更易於管理。而且,它也更模塊化,因爲我們不再將API與應用混合在一起

+0

中管理它。謝謝你,它使我的項目更清晰/更清潔:) – davs

0

如果你通過「帶maven的多模塊獨立應用程序」意味着一個獨立的,可執行的jar包含所有的依賴項,那麼onejar-maven-plugin可能就是你正在尋找的。有關使用示例,請參閱documentation

+0

謝謝您的回覆..但是.. loader項目包含基礎接口,其中的crawler-x項目使用(所以crawler-x項目依賴於加載程序)。我想在父母的.pom – davs