Соберите все подмодули maven

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

Пример:

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

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

Вы используете функцию Maven <module>?

user10452693 31.10.2018 12:33

Я мало что знаю о maven, не могли бы вы помочь.

Ahmad Qureshi 31.10.2018 12:35

Что именно вы имеете в виду под «подмодулем». Имеет ли C <dependency> на D и так далее?

user10452693 31.10.2018 12:36

Правый D - это подмодуль, который используется C, каждый модуль вызывает свои подмодули через интерфейс, поэтому, если мне нужно поменять местами какой-либо из модулей, это будет легко

Ahmad Qureshi 31.10.2018 13:01
0
4
1 949
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

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

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

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

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

Удачного взлома :)

Должен ли модуль находиться в родительском каталоге, например, в родительском - & gt; submodulejar, submodulewar, pom.xml (родительский), потому что, когда я пытался, он выбрасывал какой-то pom, не найденный для исключения проекта при установке

Ahmad Qureshi 02.11.2018 05:00

Если правильно понял - да. Вы создаете каталог (например, my-app). Внутри вы помещаете pom.xml (это родительский pom) и на том же уровне размещаете свои модули. Я обновил ответ, возможно, теперь он имеет больше смысла (часть структуры каталогов)

ikos23 02.11.2018 08:28

Другие вопросы по теме