Имея следующую ситуацию:
- СТС
- Джава
- Мавен
Машина Один
рабочая область-01
приложение Java с Maven основано на одном модуле. Он установлен (mvn install
) в репозитории, а файл master-project.jar
на другой машине установлен и используется для другого проекта, как
<dependency>
<groupId>com.manuel.jordan</groupId>
<artifactId>master-project</artifactId>
<version>0.0.1.SNAPSHOT</version>
</dependency>
Пока здесь все работает нормально
рабочая область-02
Приложение выросло, и в другой рабочей области приложение было перенесено для работы с мультимодулями.
Давайте предположим следующую структуру для простоты
master-project (<packaging>pom</packaging>)
alpha (<packaging>jar</packaging>)
beta (<packaging>jar</packaging>)
numbers (<packaging>pom</packaging>)
one (<packaging>jar</packaging>)
two (<packaging>jar</packaging>)
countries (<packaging>pom</packaging>)
Europe (<packaging>pom</packaging>)
France (<packaging>jar</packaging>)
Italy (<packaging>jar</packaging>)
AmericaLatina (<packaging>pom</packaging>)
Peru (<packaging>jar</packaging>)
Argentina (<packaging>jar</packaging>)
Я могу скомпилировать все эти модули. Поэтому обеспечивайте успех
Цель
Теперь цель состоит в том, чтобы сгенерировать тот же файл master-project.jar
, включая подмодули, что и внутренние банки.
После проведения исследования решение: maven-shade-plugin
У меня есть следующая конфигурация (часть ее), используя ссылки на следующие ссылки и другие источники:
Поэтому:
<modelVersion>4.0.0</modelVersion>
<packaging>pom</packaging> <--- it is the main or root pom.xml file
<groupId>com.manuel.jordan</groupId>
<artifactId>master-project</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
....
</properties>
<dependencies>
<dependency>
<groupId>com.hazelcast</groupId>
<artifactId>hazelcast-all</artifactId>
<version>${hazelcast.version}</version>
<scope>provided</scope> <!-- Otherwise each uber jar within each submodule is 11.6MB -->
</dependency>
</dependencies>
<modules>
<module>...</module>
...
</modules>
<build>
<plugins>
....
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<executions>
<execution>
<id>create-fat-jar</id>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<artifactSet>
<includes>
<include>com.manuel.jordan</include>
</includes>
</artifactSet>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
При текущей конфигурации происходит следующее:
Для каждого модуля в каталоге target
:
- С
<packaging>pom</packaging>
генерирует файл.pom
- С
<packaging>jar</packaging>
генерирует два файла.jar
, один из самого подмодуля, а другой из uber jar (да для каждого модуля)
Цель: какова дополнительная или отсутствующая конфигурация для создания чего-то вроде этого:
master-project.jar containing
module1.jar
module2.jar
...
module3.jar
Где каждый module#
имеет одно и то же объявление <groupId>com.manuel.jordan</groupId>
, поэтому я объявил
<configuration>
<artifactSet>
<includes>
<include>com.manuel.jordan</include>
</includes>
</artifactSet>
</configuration>
И обратите внимание, что корневой/основной файл pom.xml
имеет <packaging>pom</packaging>
Цель
Поэтому цель состоит в том, чтобы другой проект, расположенный на другой машине, оставался в покое.
<dependency>
<groupId>com.manuel.jordan</groupId>
<artifactId>master-project</artifactId>
<version>0.0.1.SNAPSHOT</version>
</dependency>
Таким образом, не имеет значения, является ли проект master-project
одномодульным или многомодульным.