Сборка всех подмодулей maven - PullRequest
0 голосов
/ 31 октября 2018

У меня есть веб-проект maven, который имеет несколько подмодулей, которые образуют иерархию. Зависимость проекта сверху указана в моем веб-проекте, который связывает все его подзависимости и делает их доступными для веб-проекта. Но проблема в том, что перед сборкой веб-проекта мне нужно запустить mvn install для всех подмодулей, начиная с проекта jar, который является самым низким в иерархии, я хочу некоторую конфигурацию maven, которая будет автоматически собирать все подмодули при сборке веб-проект.

Пример:

A (веб-проект) -> (подмодули) -> B -> C -> D -> E -> F

Когда A - это сборка, все jar-файлы должны быть перестроены и установлены на моем компьютере, чтобы отразить обновленные изменения, внесенные в мои подмодули и доступные для веб-проекта A.

1 Ответ

0 голосов
/ 31 октября 2018

Многомодульный проект определяется как 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:

подмодуль-некоторый Пб

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

Тогда наше веб-приложение, которое зависит от нашей библиотеки (значит, библиотека должна быть скомпилирована первой!):

подмодуль-мой-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 

Чтобы все это заработало, вам нужно просто запустить команду mvn clean install из родительского проекта (в самом верхнем pom.xml), и Maven сначала создаст JAR, а затем веб-приложение как WAR.

Этот подход может быть расширен для создания структуры проекта с гораздо большим количеством модулей и даже более сложных деревьев проекта (например, A зависит от B, B зависит от C и т. Д.)

Надеюсь, в этом есть какой-то смысл, есть также руководство , где вы можете найти более подробную информацию, а также полный пример, но для этого может потребоваться сначала ознакомиться с основами Maven.

Счастливого взлома :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...