如何使用Maven Assembly插件将生成的zip文件包含到主 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>
使用此配置===&gt; ,Maven抱怨它无法找到 folderA.zip ...
答案 0 :(得分:2)
不要两次声明插件;相反,您需要声明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>
不应包含扩展程序,因此finalName
folderA
将在完成ZIP程序集后生成存档folderA.zip
。第一个程序集将在构建目录中创建,默认情况下为target
。因此,第二个需要在那里引用它:
<file>
<source>${project.build.directory}/folderA.zip</source>
</file>
在其汇编描述符中。
由于第一次装配不是最后一次装配,您可能不希望它附加,即作为项目产生的附加工件。您可以将attach
设置为false
来停用此功能。这将确保在部署或发布时仅考虑最后一个最终版本。
descriptor
是不推荐使用的参数,您应该使用descriptors
代替。使用这样的配置,运行mvn clean package
将在构建文件夹中生成正确的存档。