Исключите все переходные зависимости с помощью плагина 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

Любая помощь, пожалуйста?

0 ответов