生成所有Maven子模块

时间:2018-10-31 11:28:29

标签: java maven java-ee

我有一个Maven Web项目,该项目具有构成层次结构的多个子模块。我的Web项目中指定了项目的依赖关系,该依赖关系链接了其所有子依赖关系,并使它们可用于该Web项目。但是问题是,在构建Web项目之前,我需要从jar项目(层次结构中最低的)开始为每个子模块运行mvn install时,我需要一些maven配置,该配置将在以下时间自动构建所有子模块我构建了Web项目。

示例:

A(Web项目)->(子模块)-> B-> C-> D-> E-> F

在构建A时,应将所有jar重建并安装在我的计算机上,以反映子模块中所做的更新更改,并且可用于Web项目A。

1 个答案:

答案 0 :(得分:0)

多模块项目是由parent POM定义的,该项目引用一个或多个子模块。对于您的情况,我想说您需要为所有模块创建一个并在顶层添加,但是让我提供一个更通用的示例。

首先,您需要将父pom.xml称为父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>com.my.group.id</groupId>
  <artifactId>my-parent</artifactId>

  <!-- The parent project doesn’t create a JAR or a WAR like our previous projects;
       instead, it is simply a POM that refers to other Maven projects. -->
  <packaging>pom</packaging>
  <version>1.0</version>

  <!-- ================================================================= -->
  <!-- Put all your submodules here (for this example I add two) -->
  <modules>
    <!-- This is list of artifactId for all your sub-modules  -->
    <module>sub-module-some-lib</module>
    <module>sub-module-my-webapp</module>
  </modules>
  <!-- ================================================================= -->


  <!-- everything else -->
  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <configuration>
            <source>1.8</source>
            <target>1.8</target>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>

  <dependencies>
    <!-- dependencies, etc. -->
  </dependencies>
</project>

然后让我们回到相互依赖的具体模块。首先,我们的库将是JAR:

sub-module-some-lib

<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>

  <!-- ================================================================= -->
  <!-- Notice that we declare parent here -->
  <parent>
    <groupId>com.my.group.id</groupId>
    <artifactId>my-parent</artifactId>
    <version>1.0</version>
  </parent>
  <!-- ================================================================= -->

  <artifactId>sub-module-some-lib</artifactId>
  <packaging>jar</packaging>

  <dependencies>
    <!-- e.g. specific dependencies for this module -->
  </dependencies>
</project>

然后依赖于我们的lib的webapp(意味着lib应该先编译!):

sub-module-my-webapp

<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>

  <!-- Notice that we declare parent here -->
  <parent>
    <groupId>com.my.group.id</groupId>
    <artifactId>my-parent</artifactId>
    <version>1.0</version>
  </parent>

  <artifactId>sub-module-my-webapp</artifactId>
  <packaging>war</packaging>

  <dependencies>
    <!-- some other dependencies --> 

    <!-- But our webapp depends on our sub-module-some-lib 
         so we need to add it as dependency ! -->
    <dependency>
      <groupId>com.my.group.id</groupId>
      <artifactId>sub-module-some-lib</artifactId>
      <version>1.0</version>
    </dependency>
  </dependencies>

    <!-- build, plugins, etc. -->
</project>

其目录结构如下:

  my-parent               // parent dir 
    pom.xml
    sub-module-some-lib   // module dir
      src
      pom.xml
    sub-module-my-webapp  // module dir
      src
      pom.xml 

要使其全部正常工作,您只需要从父项目(在最顶部的pom.xml上)运行mvn clean install命令,Maven将首先构建JAR,然后将Webapp构建为WAR。

可以扩展此方法以创建具有更多模块甚至更复杂的项目树的项目结构(例如,A依赖于B,B依赖于C等)

希望这很有道理,there is also a guide,您可以在其中找到更多详细信息以及完整的示例,但这可能需要您首先熟悉Maven基础。

快乐黑客:)