2010-04-23 3 views
10

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

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

Однако при работе МВН сборки: сборка, только источник из родительской папки (пусто) включены. Как включить источники из моих модулей в архив?

+0

вы нашли путь? – aurelius

ответ

0

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

6

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

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

Пакеты любое количество зависимостей в убер пакета depenency. Затем его можно развернуть в репозиторий.

+0

Добавление дочернего проекта в зависимости от других дочерних проектов (убедитесь, что все они включены) сделал трюк. Объявить тень: выполнение тени в дочернем проекте, настроенное с одним включением для всех артефактов в группе с несколькими модулями. Подробнее см. Http://maven.apache.org/plugins/maven-shade-plugin/examples/includes-excludes.html. –

1

Для упаковки классов из всех модулей в одном банке я сделал следующее:

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

  2. В pom.xml этого нового модуля я добавил maven-assemblyy-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 этого нового модуля я также добавил зависимостей для всех других модулей, включая родительский ПОМ. Только модули, включенные в зависимости, будут упаковываться в целевой файл jar.

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

4.Finally я создал дескриптор сборки в модуле сборки (файл: SRC/главная/сборки/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> 
Смежные вопросы