maven: сборка многомодульного проекта в одну банку

У меня есть многомодульный проект, и я хочу создать одну банку, содержащую классы всех моих модулей. Внутри моего родительского POM я объявил следующий плагин:

<plugin>
 <groupId>org.apache.maven.plugins</groupId>
 <artifactId>maven-assembly-plugin</artifactId>
 <configuration>
  <descriptorRefs>
   <descriptorRef>bin</descriptorRef>
  </descriptorRefs>
 </configuration>
</plugin>

Однако при запуске mvn assembly: assembly включается только источник из родительской папки (пустой). Как мне включить исходники из моих модулей в архив?


person Jeroen    schedule 23.04.2010    source источник
comment
ты нашел способ?   -  person aurelius    schedule 26.06.2015


Ответы (3)


Я думаю, вы ищете плагин Maven Shade:

http://maven.apache.org/plugins/maven-shade-plugin/index.html

Объединяет любое количество зависимостей в зависимость uber пакета. Затем его можно развернуть в репозитории.

person Lincoln    schedule 12.05.2010
comment
Добавление дочернего проекта в зависимости от других дочерних проектов (убедитесь, что все они включены) помогло. Объявите выполнение shade: shade в дочернем проекте, настроенном с одним включением для всех артефактов в многомодульной группе. См. maven.apache.org/plugins/maven-shade -plugin / examples / для получения подробной информации. - person Stijn Van Bael; 07.12.2010

Чтобы упаковать классы из всех модулей в одну банку, я сделал следующее:

  1. Создан дополнительный модуль, который используется только для упаковки содержимого всех остальных модулей в одну банку. Обычно его называют модулем сборки. Попробуйте вызвать этот модуль так же, как целевой файл jar.

  2. В pom.xml этого нового модуля я добавил maven-assembly-plugin. Этот плагин упаковывает все классы и помещает их в один файл. Он использует дополнительный файл конфигурации (шаг 4.)

<build>
    <plugins>
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.4</version>
        <executions>
          <execution>
            <id>go-framework-assemby</id>
            <phase>package</phase><!-- create assembly in package phase (invoke 'single' goal on assemby plugin)-->
            <goals>
              <goal>single</goal>
            </goals>
            <configuration>
              <descriptors>
                <descriptor>src/main/assemble/framework_bin.xml</descriptor>
              </descriptors>
                  <finalName>framework</finalName>
                  <appendAssemblyId>false</appendAssemblyId>
          </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

3. В pom.xml этого нового модуля я также добавил зависимости для всех других модулей, включая родительский pom. В целевой файл jar будут упакованы только модули, включенные в зависимости.

<dependencies>
    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>fwk-bam</artifactId>
        <version>${project.version}</version>
    </dependency>...

4. Наконец, я создал дескриптор сборки в модуле сборки (файл: src / main / assembly / framework_bin.xml)

<assembly
    xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
    <id>all-jar</id>
    <formats>
        <format>jar</format> <!-- the result is a jar file -->
    </formats>

    <includeBaseDirectory>false</includeBaseDirectory> <!-- strip the module prefixes -->

    <dependencySets>
        <dependencySet>
            <unpack>true</unpack> <!-- unpack , then repack the jars -->
            <useTransitiveDependencies>false</useTransitiveDependencies> <!-- do not pull in any transitive dependencies -->
        </dependencySet>
    </dependencySets>
</assembly>
person zoran    schedule 13.02.2014

Предопределенный bin здесь не поможет. Вам нужно будет использовать настраиваемый дескриптор, аналогичный предопределенному дескриптору bin, но объявляющий _ 3_, чтобы включить модули вашего проекта.

person Pascal Thivent    schedule 23.04.2010