Разделяйте банки с помощью подключаемого модуля maven - PullRequest
0 голосов
/ 19 декабря 2018

Мне нужно разделить банки в разные папки.

Внутри моего проекта у меня есть несколько модулей, а именно: module1, module2 и сборка.

Используя подключаемый модуль maven, яхотел бы поместить сгенерированный jar из modules1 и module2 в target / modules и все зависимости в target / dependencies.

Как мне выполнить это требование?

Спасибо

1 Ответ

0 голосов
/ 20 декабря 2018

Исходя из того, что ваш проект структурирован как:

project
    |- module1
    |- module2
    |- assembly
        |- pom.xml
        |- src
            |- assembly
                |- bin.xml

assembly должно зависеть от module1 и module2;установите эти зависимости в assembly/pom.xml:

<dependencies>
    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>module1</artifactId>
        <version>${project.version}</version>
    </dependency>
    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>module2</artifactId>
        <version>${project.version}</version>
    </dependency>
</dependencies>

Вы также должны добавить maven-assembly-plugin в assembly/pom.xml:

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>3.1.0</version>
    <configuration>
        <descriptors>
            <descriptor>src/assembly/bin.xml</descriptor>
        </descriptors>
    </configuration>
    <executions>
        <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>

assembly:single привязан к фазе package, чтобысоздать сборку при запуске mvn package.

Наконец, определите assembly/src/assembly/bin.xml следующим образом:

<assembly   xmlns="http://maven.apache.org/ASSEMBLY/2.0.0"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0 http://maven.apache.org/xsd/assembly-2.0.0.xsd">
    <id>bin</id>
    <formats>
        <format>dir</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <dependencySets>
        <dependencySet>
            <outputDirectory>modules</outputDirectory>
            <includes>
                <include>${project.groupId}:*:*</include>
            </includes>
            <excludes>
                <exclude>${project.groupId}:${project.artifactId}:*</exclude>
            </excludes>
        </dependencySet>
        <dependencySet>
            <useTransitiveDependencies>true</useTransitiveDependencies>
            <outputDirectory>dependencies</outputDirectory>
            <excludes>
                <exclude>${project.groupId}:*:*</exclude>
            </excludes>
        </dependencySet>
    </dependencySets>
</assembly>
  • format определяет формат, который вы хотите для сборки (здеськаталог, но может быть tar.gz, zip, ...)
  • first dependencySet определяет папку modules/, в которую будут помещены все артефакты из одного и того же groupId.Здесь вы также можете контролировать, хотите ли вы только некоторые из артефактов (например, если вы хотите только module1).assembly JAR исключен из этой папки, так как этот модуль используется только для создания сборки.
  • секунда dependencySet определяет папку dependencies/, в которую будут помещены все зависимости (и транзитивные зависимости).Зависимость здесь означает артефакт с другим groupId, поскольку говорится, что excludes предложение

mvn package будет генерировать сборку (в папке assembly/target/) с именемassembly-${project.version}-bin, с нужной вам структурой.

...