Maven 程序集:生成资源 zip 文件并将其包含到主程序集 zip 文件中
Maven assembly: generate a resource zip file and include it into the main assembly zip file
如何使用 Maven Assembly 插件将生成的 zip 文件包含到 main zip 文件中?
例如,我有以下文件夹结构:
./folderA/
./file1
我想生成一个 zip 文件,内容如下:
folderA.zip
file1
这里是我的简化配置':
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project >
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<descriptor>${basedir}/assembly-zipFolderA.xml</descriptor>
<finalName>folderA.zip</finalName>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<descriptor>${basedir}/assembly.xml</descriptor>
<finalName>${module-zipFinalName}</finalName>
</configuration>
</plugin>
</plugins>
</build>
</project>
程序集-zipFolderA.xml
<assembly>
<id>folderA-zip</id>
<includeBaseDirectory>false</includeBaseDirectory>
<formats>
<format>zip</format>
</formats>
<fileSets>
<fileSet>
<directory>folderA</directory>
<outputDirectory>/</outputDirectory>
</fileSet>
</fileSets>
</assembly>
assembly.xml
<assembly>
<id>main</id>
<includeBaseDirectory>false</includeBaseDirectory>
<formats>
<format>zip</format>
</formats>
<files>
<file>
<source>file1</source>
</file>
<file>
<source>folderA.zip</source>
</file>
</files>
</assembly>
===> 使用此配置,Maven 抱怨找不到 folderA.zip...
不要声明插件两次;相反,您需要声明 maven-assembly-plugin
.
的两次执行
第一次执行将创建第一个程序集,然后第二次执行将使用此程序集创建最后一个程序集。这两个执行都将绑定到 package
阶段,Maven 将调用插件的执行 in the order of declaration in the POM.
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>make-folderA</id>
<goals>
<goal>single</goal>
</goals>
<phase>package</phase>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<descriptors>
<descriptor>${basedir}/assembly-zipFolderA.xml</descriptor>
</descriptors>
<finalName>folderA</finalName> <!-- name without extension -->
<attach>false</attach>
</configuration>
</execution>
<execution>
<id>make-assembly</id>
<goals>
<goal>single</goal>
</goals>
<phase>package</phase>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<descriptors>
<descriptor>${basedir}/assembly.xml</descriptor>
</descriptors>
<finalName>${module-zipFinalName}</finalName>
</configuration>
</execution>
</executions>
</plugin>
一些注意事项:
<finalName>
不应包含扩展名,因此 folderA
的 finalName
将在制作 ZIP 程序集后生成存档 folderA.zip
。
第一个程序集将在构建目录中创建,默认情况下为 target
。因此,第二个需要在那里引用它:
<file>
<source>${project.build.directory}/folderA.zip</source>
</file>
在其程序集描述符中。
由于第一个程序集不是最后一个程序集,您可能不希望附加它,即作为项目产生的附加工件。您可以通过将 attach
设置为 false
来禁用此功能。这将确保在部署或发布时只考虑最后一个。
descriptor
is a deprecated parameter, you should use descriptors
代替。
使用这样的配置,运行 mvn clean package
将在构建文件夹中生成正确的存档。
如何使用 Maven Assembly 插件将生成的 zip 文件包含到 main zip 文件中?
例如,我有以下文件夹结构:
./folderA/
./file1
我想生成一个 zip 文件,内容如下:
folderA.zip
file1
这里是我的简化配置':
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project >
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<descriptor>${basedir}/assembly-zipFolderA.xml</descriptor>
<finalName>folderA.zip</finalName>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<descriptor>${basedir}/assembly.xml</descriptor>
<finalName>${module-zipFinalName}</finalName>
</configuration>
</plugin>
</plugins>
</build>
</project>
程序集-zipFolderA.xml
<assembly>
<id>folderA-zip</id>
<includeBaseDirectory>false</includeBaseDirectory>
<formats>
<format>zip</format>
</formats>
<fileSets>
<fileSet>
<directory>folderA</directory>
<outputDirectory>/</outputDirectory>
</fileSet>
</fileSets>
</assembly>
assembly.xml
<assembly>
<id>main</id>
<includeBaseDirectory>false</includeBaseDirectory>
<formats>
<format>zip</format>
</formats>
<files>
<file>
<source>file1</source>
</file>
<file>
<source>folderA.zip</source>
</file>
</files>
</assembly>
===> 使用此配置,Maven 抱怨找不到 folderA.zip...
不要声明插件两次;相反,您需要声明 maven-assembly-plugin
.
第一次执行将创建第一个程序集,然后第二次执行将使用此程序集创建最后一个程序集。这两个执行都将绑定到 package
阶段,Maven 将调用插件的执行 in the order of declaration in the POM.
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>make-folderA</id>
<goals>
<goal>single</goal>
</goals>
<phase>package</phase>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<descriptors>
<descriptor>${basedir}/assembly-zipFolderA.xml</descriptor>
</descriptors>
<finalName>folderA</finalName> <!-- name without extension -->
<attach>false</attach>
</configuration>
</execution>
<execution>
<id>make-assembly</id>
<goals>
<goal>single</goal>
</goals>
<phase>package</phase>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<descriptors>
<descriptor>${basedir}/assembly.xml</descriptor>
</descriptors>
<finalName>${module-zipFinalName}</finalName>
</configuration>
</execution>
</executions>
</plugin>
一些注意事项:
<finalName>
不应包含扩展名,因此folderA
的finalName
将在制作 ZIP 程序集后生成存档folderA.zip
。第一个程序集将在构建目录中创建,默认情况下为
target
。因此,第二个需要在那里引用它:<file> <source>${project.build.directory}/folderA.zip</source> </file>
在其程序集描述符中。
由于第一个程序集不是最后一个程序集,您可能不希望附加它,即作为项目产生的附加工件。您可以通过将
attach
设置为false
来禁用此功能。这将确保在部署或发布时只考虑最后一个。descriptor
is a deprecated parameter, you should usedescriptors
代替。
使用这样的配置,运行 mvn clean package
将在构建文件夹中生成正确的存档。