2012-11-26 186 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