多模块项目

项目布局

由于工作空间的想法,许多 Eclipse 用户习惯于平面布局,因此希望保持这种结构。以下示例展示了如何使用 Eclipse 处理标准 Maven 分层项目布局和类似 Eclipse 的平面布局的 Maven 多模块项目。

分层项目布局

假设 Eclipse 是您最喜欢的 SCM 客户端,这个分步示例展示了如何设置一个新的多模块项目。

  1. 设置一个名为step-by-step的新 Eclipse 工作区并添加M2_REPO类路径变量。
  2. 打开命令行 shell 并切换到新创建的工作区目录。
  3. 从命令行,使用原型插件创建一个新的 maven 项目。
    mvn archetype:create -DgroupId=guide.ide.eclipse -DartifactId=guide-ide-eclipse
  4. 使用 Eclipse在分步工作区中创建一个新的简单项目guide-ide-eclipse(从菜单栏中选择 File >New > Project。选择 Simple > Project)。Eclipse 将为您的guide-ide-eclipse项目创建一个简单的.project文件,您应该能够看到pom.xml文件。
  5. 删除src文件夹并打开pom.xml文件以将父项目的打包更改为pom
      <packaging>pom</packaging>
  6. 从命令行切换到guide-ide-eclipse项目目录并创建一些模块。
    cd guide-ide-eclipse
    mvn archetype:create -DgroupId=guide.ide.eclipse -DartifactId=guide-ide-eclipse-site
    mvn archetype:create -DgroupId=guide.ide.eclipse.core -DartifactId=guide-ide-eclipse-core
    mvn archetype:create -DgroupId=guide.ide.eclipse.module1 -DartifactId=guide-ide-eclipse-module1
  7. 将新创建的模块添加到您的父 pom.xml 中。
      <modules>
        <module>guide-ide-eclipse-site</module>
        <module>guide-ide-eclipse-core</module>
        <module>guide-ide-eclipse-module1</module>
      </modules>
  8. 将父级添加到新模块的 POM 中:
      <parent>
      <groupId>guide.ide.eclipse</groupId>
      <artifactId>guide-ide-eclipse</artifactId>
      <version>1.0-SNAPSHOT</version>
      </parent>
  9. 将module1的依赖添加到core -module:
        <dependency>
          <groupId>guide.ide.eclipse.core</groupId>
          <artifactId>guide-ide-eclipse-core</artifactId>
          <version>1.0-SNAPSHOT</version>
        </dependency>
  10. 在本地存储库中安装项目并生成 Eclipse 文件:
    mvn install
    mvn eclipse:eclipse
  11. 使用 Eclipse 团队支持签入您的项目(从上下文菜单 Team > Share Project 中选择)。注意:不要签入生成的 Eclipse 文件。如果您使用 CVS,您应该有一个.cvsignore文件,其中包含每个模块的以下条目:
    target
    .classpath
    .project
    .wtpmodules

    即使是父项目也应该有这个.cvsignore -file。当您从存储库中签出项目时,Eclipse 将自动生成一个新的简单.project文件。

从现在开始,您有不同的选择可以继续。如果您同时处理所有模块并且您希望拥有 Eclipse 项目依赖项而不是二进制依赖项,那么您应该设置一个新工作区并从step-by-step/guide-ide-eclipse导入所有项目。请注意,您必须先删除父项目的.project文件。结果与从命令行签出整个项目、运行mvn eclipse:eclipse并最终将项目导入 Eclipse 工作区中的结果相同。在这两种情况下,您都可以使用 Eclipse 同步您的更改。

在涉及许多开发人员的大型项目中,检查所有模块并使其保持最新可能会很乏味。特别是如果您只对一两个模块感兴趣。在这种情况下,使用二进制依赖会更舒服。只需检查您要使用 Eclipse 处理的模块并为每个模块运行mvn eclipse:eclipse(另请参阅Maven as an external tool。当然,所有引用的工件都必须可从您的 maven 存储库中获得。

平面项目布局

可以将父 POM 移动到其自己的目录中与引用的模块处于同一级别,从而产生平面项目布局。

使用平面项目布局,您可以签出和编辑父 POM,而无需签出整个项目。

  1. 在guide-ide-eclipse下创建一个名为guide-ide-eclipse-project的新目录并将父 POM 移动到该目录。
  2. 将父 POM 中的模块引用更改为:
      <modules>
        <module>../guide-ide-eclipse-site</module>
        <module>../guide-ide-eclipse-core</module>
        <module>../guide-ide-eclipse-module1</module>
      </modules>

问题: Maven 发布插件不支持平面结构 ( MRELEASE-261 )。