maven-shade-plugin: как добавить все зависимости и пользовательский локальный jar в исполняемый файл jar? - PullRequest
0 голосов
/ 15 марта 2019

Maven 3 Java 1.8

В моем pom.xml

    <dependencies>
        <dependency>
            <groupId>com.myproject/groupId>
            <artifactId>mixed-pojo</artifactId>
            <version>1.0-SNAPSHOT</version>
            <scope>system</scope>
            <systemPath>${project.basedir}/libs/external-pojo-1.0-SNAPSHOT.jar</systemPath>
        </dependency>
        <dependency>
            <groupId>org.jetbrains.kotlin</groupId>
            <artifactId>kotlin-stdlib-jdk8</artifactId>
            <version>${kotlin.version}</version>
        </dependency>
        <dependency>
            <groupId>org.jetbrains.kotlin</groupId>
            <artifactId>kotlin-test</artifactId>
            <version>${kotlin.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.zaxxer</groupId>
            <artifactId>HikariCP</artifactId>
            <version>3.3.1</version>
    </dependency>
...

Мне нужно создать ОДИН исполняемый jar .Поэтому я использую плагин maven-shade-plugin здесь фрагмент кода:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>3.2.1</version>
        <executions>
            <execution>
                <phase>package</phase>
                <goals>
                    <goal>shade</goal>
                </goals>
                <configuration>
                    <transformers>
                        <transformer
                                implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                            <mainClass>com.myproject.AppStarterKt</mainClass>
                        </transformer>
                    </transformers>
                    <artifactSet>
                        <includes>
                            <include>${project.basedir}/libs/external-pojo-1.0-SNAPSHOT.jar</include>
                            <include>com.zaxxer:HikariCP</include>
                        </includes>
                    </artifactSet>
                </configuration>
            </execution>
        </executions>
    </plugin>

В результате он генерирует executable jar:

myproject-1.0-SNAPSHOT-shaded.jar

Nice.Но проблема в том, что мне нужно вручную добавить ВСЕ зависимости в плагин следующим образом:

<artifactSet>
                                <includes>
                                    <include>${project.basedir}/libs/external-pojo-1.0-SNAPSHOT.jar</include>
                                    <include>com.zaxxer:HikariCP</include>
                                </includes>
                            </artifactSet>

Но у меня есть 50 зависимостей.Как добавить ВСЕ зависимости в исполняемый файл jar?

PS

external-pojo-1.0-SNAPSHOT.jar

- это внешний пользовательский файл jar, который находится в папке проекта /libs

1 Ответ

1 голос
/ 15 марта 2019

По умолчанию все зависимые области runtime будут включены в затененный UAR JAR. Удалите <artifactSet> из <configuration>, чтобы получить поведение по умолчанию.

<artifactSet> опция конфигурации используется для отмены значений по умолчанию. Если указан параметр <includes>, это белый список артефактов для включения.

Начиная с версии 1.3 плагина, вы можете использовать подстановочные знаки * и ?, но в вашем примере это не обязательно:

<includes>
  <include>**</include>
</includes>
...