Создайте jar-файл только с классами зависимостей maven - PullRequest
0 голосов
/ 11 июля 2019

У меня есть 2 проекта, проект A и проект B. Проект A зависит от проекта B.

pom.xml проекта A:

<dependencies>
    <dependency>
        <groupId>nft.dcs</groupId>
        <artifactId>B</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
</dependencies>

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>3.1.1</version>
    <configuration>
        <appendAssemblyId>true</appendAssemblyId>

        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
    </configuration>

    <executions>
        <execution>
            <id>make-vision-plugin</id>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
            <configuration>
                <descriptors>
                    <descriptor>src/assembly/dep.xml</descriptor>
                </descriptors>
            </configuration>
        </execution>
    </executions>
</plugin>

Затем я компилирую свой проект, и он создает банку со всеми ненужными мне зависимостями. Созданы дополнительные папки, которые не нужно включать в файл jar. Я думаю, что эти зависимости тянутся вместе с зависимостью от проекта B. Используя файл dep.xml , я указываю, какие папки вам не нужно включать в файл jar.

dep.xml

<id>with-spec</id>
    <formats>
        <format>jar</format>
    </formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
    <dependencySet>
        <outputDirectory>/</outputDirectory>
        <useProjectArtifact>false</useProjectArtifact>
        <unpack>true</unpack>
        <unpackOptions>
            <excludes>
                <exclude>nft/**</exclude>
                <exclude>com/**</exclude>
                <exclude>impl/**</exclude>
                <exclude>javax/**</exclude>
                <exclude>junit/**</exclude>
                <exclude>org/**</exclude>
                <exclude>oshi/**</exclude>
                <exclude>sound/**</exclude>
            </excludes>
        </unpackOptions>
        <scope>runtime</scope>
    </dependencySet>
</dependencySets>
<fileSets>
    <fileSet>
        <directory>${project.build.outputDirectory}</directory>
        <outputDirectory>/</outputDirectory>
    </fileSet>
</fileSets>

Этот метод просто ужасен. Скажите, пожалуйста, можно ли добавить в класс jar только классы из зависимости и не тянуть все остальные папки.

Ответы [ 2 ]

0 голосов
/ 11 июля 2019

Вы создаете банку с зависимостями, возможно, для ее автономного запуска.

Так что, если A нужен B, а B имеет зависимости самостоятельно, A, вероятно, также нуждается в них для запуска. Поэтому целесообразно упаковать все зависимости B в работающую флягу.

Если B имеет ненужные зависимости, их следует удалить из B.

Если у B есть зависимости, которые по какой-то причине не требуются, когда A использует B, вы должны добавить правильное исключение к зависимости в POM.

0 голосов
/ 11 июля 2019

Вы можете попробовать использовать предоставленную область действия:

<dependencies>
    <dependency>
        <groupId>nft.dcs</groupId>
        <artifactId>B</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

Следует принять во внимание, что, как указано в документации maven:

указывает, что вы ожидаете, что JDK или контейнер предоставятзависимость во время выполнения

...