【问题标题】:Create multi-module project in maven在maven中创建多模块项目
【发布时间】:2012-11-26 20:16:29
【问题描述】:

我想用 maven 创建多模块独立应用程序。

在我的情况下,我想让“加载器”项目 (.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”(因为它依赖于“Loader”项目)
  3. 编译/打包“crawler2”(因为它依赖于“Loader”项目)
  4. 带有已编译“爬虫”项目的包加载器

附言:

  1. 感谢 Adrian Shum,他提出了一个让我的项目更清晰的想法
  2. 在“启动器”项目中重组我的项目后,我们可以添加 通过maven-assembly-plugin 依赖(@see http://rombertw.wordpress.com/2010/05/14/maven-recipe-building-an-aggregate-jar/)

【问题讨论】:

    标签: maven multi-module


    【解决方案1】:

    我建议这样的项目结构:

    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 与应用程序混合在一起

    【讨论】:

      【解决方案2】:

      如果您所说的“使用 maven 的多模块独立应用程序”是指包含其所有依赖项的自包含、可执行 jar,那么 onejar-maven-plugin 可能就是您要寻找的东西。有关用法示例,请参阅documentation。

      【讨论】:

      • 感谢您的回复.. 但是.. loader 项目包含基本接口,crawler-x 项目使用这些接口(因此 crawler-x 项目依赖于 loader)。我想在父母的 .pom 中管理它
      猜你喜欢
      • 2011-03-13
      • 2016-10-25
      • 2022-08-14
      • 2021-11-08
      • 1970-01-01
      • 2020-04-01
      • 2017-09-20
      • 2017-10-09
      • 2018-02-06
      相关资源
      最近更新 更多