Ответ 1
Я думаю, что вы ищете плагин Maven Shade:
http://maven.apache.org/plugins/maven-shade-plugin/index.html
Упаковывает любое количество зависимостей в зависимость пакета Uber. Затем его можно развернуть в репозиторий.
У меня есть проект с несколькими модулями и вы хотите создать единую банку, содержащую классы всех моих модулей. В моей родительской POM я объявил следующий плагин:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>bin</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
Однако при запуске сборки mvn: сборка включается только источник из родительской папки (пустой). Как включить источники из моих модулей в архив?
Я думаю, что вы ищете плагин Maven Shade:
http://maven.apache.org/plugins/maven-shade-plugin/index.html
Упаковывает любое количество зависимостей в зависимость пакета Uber. Затем его можно развернуть в репозиторий.
Чтобы упаковать классы из всех модулей в одну банку, я сделал следующее:
Создан дополнительный модуль, который используется только для упаковки содержимого всех других модулей в одну банку. Обычно это называется модулем сборки. Попробуйте называть этот модуль таким же, как и файл целевого jar.
В pom.xml этого нового модуля я добавил maven-assemby-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>
Предопределенный bin
здесь не поможет. Вам нужно будет использовать собственный дескриптор, похожий на предопределенный дескриптор bin
, но который объявит moduleSet
, чтобы включить ваши модули проекта.