Исключите все переходные зависимости с помощью плагина Apache Maven Shade
Я использовал Apache Maven Shade Plugin для создания толстой фляги (фляги, которая включает все классы от всех зависимостей). Структура моего текущего проекта выглядит примерно так:
> Parent Module (packaging pom)
> Module 1 (packaging jar)
> Own classes
> Dependency-1
> Dependency-2
> Module 2 (packaging jar)
> Own classes
> Module 1 (I want here only classes written in module-1, not any transitive dependencies)
> Dependency-1
> Dependency-2
> Dependency-3
pom.xml
снимок из родительского модуля,
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<executions>
<execution>
<id>common-shade</id>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.handlers</resource>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.schemas</resource>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
pom.xml
Снимок из Модуля-1 и Модуля-2 выглядит следующим образом,
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<executions>
<execution>
<id>common-shade</id>
<phase>package</phase>
</execution>
</executions>
</plugin>
Зависимость, объявленная для модуля 1 в модуле 2 выглядит следующим образом:
<dependency>
<groupId>my.com.groupId</groupId>
<artifactId>my.artifactId</artifactId>
<version>1.0.0-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>*</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
ПРИМЕЧАНИЕ. В настоящее время, если я вижу свои зависимости, используя mvn dependency:tree -Dverbose
, то это показывает, как ожидалось, но shade-plugin
не исключая этого.
Проблема: Module-1 и module-2 имеют некоторые одинаковые зависимости с разными версиями. Если я пропущу / отключу шейд-плагин, объявленный в Модуле-1, то смогу запустить Модуль-2 без проблем, но если я не отключу его, то созданный Модулем-2 толстый файл jar содержит некоторые классы из файлов jar с Модулем -1 версии, поэтому мой Модуль-2 перестает работать.
ОБНОВЛЕНИЕ: я использую толстую банку для запуска отдельных модулей, как это, java -cp module.jar com.mycom.Main
Любая помощь, пожалуйста?