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