【问题标题】:How to do a modular project architecture with Maven in Eclipse?如何在 Eclipse 中使用 Maven 进行模块化项目架构?
【发布时间】:2017-11-06 15:41:56
【问题描述】:

首先我是Maven+Eclipse世界的小新手,所以如果我解释得不好,请原谅。

我正在尝试将 Maven 实施到现有的 Java 旧项目中,我试图实现的架构是这样的(我放了一张图片来更好地解释自己):

项目Utils 拥有最多的库,一般将用于其他项目,以及一些对其他人有用的类(如日期比较方法和数学方法等......),这个项目与mvn install 配合良好,生成各自的.war 文件。

问题是:

  • N Web Modules 项目必须将项目 Utils 作为 依赖和大多数依赖。我 不知道如何在N Web Modulespom.xml 中实现这一点 项目。
  • 我不知道它是否可能在 Eclipse+Maven:尝试做一些Parent Web Project 实施其他项目,并在一个单一的mvn install 父项目buildinstall 其余的孩子 (包括UtilsN Web Modules)。

我希望你能指导并帮助我解决这个问题。

【问题讨论】:

    标签: eclipse maven pom.xml modular parent-pom


    【解决方案1】:

    我认为您正在寻找多模块项目

    http://books.sonatype.com/mvnex-book/reference/multimodule.html

    您可以将各种子项目放在一个更大的项目中,并一次构建它们。此外,模块可以依赖于其他模块(只要这不是循环的)并且它们以正确的顺序构建。

    【讨论】:

    • 谢谢!我去看看!
    【解决方案2】:

    Utils 项目拥有最多的库,通常是 用于其他项目,以及一些对 其他(如日期比较方法和数学方法等......), 这个项目与 mvn install 配合得很好,生成 各自的 .war 文件。

    有一个建议,您应该在 Maven 项目中使用 JAR 包装提取其他项目使用的类,而不是将它们留在 WAR 包装中。
    在 Maven 中,通常以 JAR 的形式提供依赖项。
    它也可以通过使用某些特定属性(例如attachClasses)配置maven-war-plugin 来作为WAR 提供,但它看起来像一个技巧,它也可能会产生副作用。 Here 是有关如何执行此操作的一些信息。 但是文档不建议这样:

    如果你需要在另一个项目中重复使用这个 JAR/WAR,推荐 方法是将类移动到一个单独的模块中,该模块构建一个 JAR,然后从你的 webapp 声明对该 JAR 的依赖 以及任何其他需要它的项目。

    关于你的两个问题。

    N 个 Web Modules 项目必须将项目 Utils 作为依赖项 以及大多数依赖项。我不知道如何实现这一点 N 个 Web Modules 项目的 pom.xml。

    只需将其作为依赖项包含在消费者项目的 dependencies 元素中即可:

    <?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>mygroup</groupId>
        <artifactId>project1-consumer</artifactId>  
        <packaging>war</packaging>
        <version>1.0-SNAPSHOT</version>
        ...
        <dependencies>      
            <dependency>
                <groupId>mygroup</groupId>
                <artifactId>util</artifactId>   
                <version>1.0-SNAPSHOT</version>
            </dependency>
           ...
        </dependencies>     
    </project>
    

    我不知道在 Eclipse+Maven 中是否可行:尝试做一些 Parent 实现其他项目并在一个单一 mvn 中的 Web 项目 安装父项目构建并安装其余的子项目 (包括 Utils 和 N 个 Web 模块)。

    您正在寻找的是设计a multi-module project

    它依赖于声明每个模块的聚合器 pom。
    请注意,必须使用 pom 包装指定此模块,因为它不会生成消耗品。

    你可以这样定义:

    <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/maven-v4_0_0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>mygroup</groupId>
        <artifactId>myaggregatorpom</artifactId>
        <packaging>pom</packaging>
        <version>1.0-SNAPSHOT</version>
    
        <modules>
            <module>util</module>
            <module>project1-consumer</module>
            <module>project2-consumer</module>
        </modules>
    
    </project>
    

    【讨论】:

    • 感谢您这么快的回答,我将Utils 项目的包装从.WAR 更改为.JAR。然后我在N Web Module项目中添加了Utils的依赖,但是N Web Module中没有提供Utils的依赖。我正在调查multi-module project。我会继续通知。
    猜你喜欢
    • 1970-01-01
    • 2012-03-12
    • 1970-01-01
    • 1970-01-01
    • 2015-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-27
    相关资源
    最近更新 更多