Ошибка создания архива сборки в мультимодульном проекте maven
Я создал мультимодульный проект Maven с 2 модулями (child1, child2).
Я пытаюсь создать пакет - APP.zip, который должен содержать app.properties, child1.war и child2.war, используя плагин сборки.
Но я получаю следующую ошибку при запуске сборки mvn: одна команда
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-assembly-plugin:2.6:single (default-cli) on project app: Failed to create assembly: Error creating assembly archive My_Package: You must set at least one file. -> [Help 1]
Структура папок проекта
app
|
pom.xml
assembly.xml
app.properties
child 1
|
pom.xml src target
|
child1.war
child 2
|
pom.xml src target
|
child2.war
Родительский пом (app / pom.xml)
<project>
<groupId>com.karthik</groupId>
<artifactId>parent</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<name>parent</name>
<modules>
<module>child 1</module>
<module>child 2</module>
</modules>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<finalName>APP</finalName>
<appendAssemblyId>false</appendAssemblyId>
<descriptors>
<descriptor>assembly.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<id>make-bundles</id>
<goals>
<goal>single</goal>
</goals>
<phase>package</phase>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
assembly.xml
<assembly
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
<formats>
<format>zip</format>
</formats>
<id>My_Package</id>
<includeBaseDirectory>false</includeBaseDirectory>
<moduleSets>
<moduleSet>
<useAllReactorProjects>true</useAllReactorProjects>
<includes>
<include>com.karthik:child1</include>
<include>com.karthik:child2</include>
</includes>
</moduleSet>
</moduleSets>
</assembly>
Я полагаю, что что-то упустил в дескрипторе сборки, который вызывает эту ошибку.
1) Не могли бы вы помочь решить эту проблему и помочь в создании ZIP-файла (APP.zip), содержащего app.properties, child1.war и child2.war?
2) Когда нам нужно использовать <fileSet>
& <moduleSet>
теги?
3 ответа
Наконец я нашел решение
1) Добавить отдельный модуль - дистрибутив для сборки в родительском POM.
Родитель POM
<project>
<groupId>com.karthik</groupId>
<artifactId>parent</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<name>parent</name>
<modules>
<module>child 1</module>
<module>child 2</module>
<module>distribution</module>
</modules>
</project>
2) Сконфигурировать подключаемый модуль maven в модуле распространения
Модуль распределения ПОМ
<parent>
<groupId>com.karthik</groupId>
<artifactId>parent</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>distribution</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<name>Distribution</name>
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<id>make-bundles</id>
<goals>
<goal>single</goal>
</goals>
<phase>package</phase>
<configuration>
<descriptors>
<descriptor>assembly.xml</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
3) Добавить файлы / артефакты для сборки в <files>
элемент дескриптора сборки
assembly.xml
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
<id>distribution</id>
<formats>
<format>zip</format>
</formats>
<files>
<file>
<source>../Child1/target/child1.war</source>
</file>
<file>
<source>../Child2/target/child2.war</source>
</file>
<file>
<source>../app.properties</source>
</file>
</files>
</assembly>
Используйте пример здесь
Это рабочий пример, родительский pom:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.greg</groupId>
<artifactId>assembly-example</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>assembly-example</name>
<modules>
<module>child1</module>
<module>child2</module>
<module>distribution</module>
</modules>
<build>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<descriptors>
<descriptor>src/assembly/assembly.xml</descriptor>
</descriptors>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
Ребенок пом:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.greg</groupId>
<artifactId>assembly-example</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>child1</artifactId>
<packaging>jar</packaging>
<name>child1</name>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
распределительная пом:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.greg</groupId>
<artifactId>assembly-example</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>distribution</artifactId>
<packaging>jar</packaging>
<name>Distribution</name>
<dependencies>
<dependency>
<groupId>com.greg</groupId>
<artifactId>child1</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.greg</groupId>
<artifactId>child2</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<id>distro-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptors>
<descriptor>src/assembly/assembly.xml</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
</project>
assembly.xml в каталоге дистрибутива /src/assembly:
<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>zip</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<moduleSets>
<moduleSet>
<useAllReactorProjects>true</useAllReactorProjects>
<includes>
<include>com.greg:child1</include>
</includes>
<binaries>
<outputDirectory>modules/maven-assembly-plugin</outputDirectory>
<unpack>false</unpack>
</binaries>
</moduleSet>
</moduleSets>
</assembly>
mvn clean package p
Создает zip-файл:
jar tvf distribution/target/distribution-1.0-SNAPSHOT-bin.zip
0 Mon Oct 23 14:55:10 BST 2017 modules/
0 Mon Oct 23 14:55:10 BST 2017 modules/maven-assembly-plugin/
2086 Mon Oct 23 14:55:06 BST 2017 modules/maven-assembly-plugin/child1-1.0-SNAPSHOT.jar
2086 Mon Oct 23 14:55:08 BST 2017 modules/maven-assembly-plugin/child2-1.0-SNAPSHOT.jar
jar tvf distribution/target/distribution-1.0-SNAPSHOT-bin.zip
0 Mon Oct 23 14:55:10 BST 2017 modules/
0 Mon Oct 23 14:55:10 BST 2017 modules/maven-assembly-plugin/
2086, понедельник, 23 октября, 14:55:06 BST 2017 modules / maven-assembly-plugin / child1-1.0-SNAPSHOT .jar 2086 Mon Oct 23 14:55:08 BST 2017 modules / maven-assembly-plugin / child2-1.0-SNAPSHOT .банка
здесь также вы можете получить свою войну и банку по своему желанию. Как это
<outputFileNameMapping>${module.artifactId}.${module.extension}</outputFileNameMapping>
используйте это для получения файлов war и jar.
В файле сборки
<moduleSets>
<moduleSet>
<useAllReactorProjects>true</useAllReactorProjects>
<includes>
<include>com.greg:child1</include>
</includes>
<binaries>
<outputDirectory>modules/maven-assembly-plugin</outputDirectory>
<unpack>false</unpack>
</binaries>
</moduleSet>
здесь просто добавьте строку выше, чтобы получить этот файл jar, например
<moduleSets>
<moduleSet>
<useAllReactorProjects>true</useAllReactorProjects>
<includes>
<include>com.greg:child1</include>
</includes>
<binaries>
<outputDirectory>modules/maven-assembly-plugin</outputDirectory>
<outputFileNameMapping>${module.artifactId}.${module.extension}</outputFileNameMapping>
<unpack>false</unpack>
</binaries>
</moduleSet>
надеюсь, что это будут другие ...
ссылка: чтобы увидеть больше