【发布时间】:2015-05-24 16:40:14
【问题描述】:
我的一个项目的结构如下:
.\ca\<modulename>\dist\<modulename>.zip
我想制作一个仅在一个包中包含 zip 文件的包,所以如果我有子模块 mod1、mod2、modn,我最终会得到:
ZIP CONTENT:
mod1.zip
mod2.zip
...
modn.zip
到目前为止,我所做的是创建一个 maven 项目,并使用 maven dependency 和 assembly 插件,我得到了这个:
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>unpack</id>
<phase>generate-sources</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>es.xunta.emprego.cntxes</groupId>
<artifactId>myproject-cas</artifactId>
<version>${cas.version}</version>
<overWrite>true</overWrite>
<outputDirectory>target/dependency</outputDirectory>
<type>zip</type>
<includes>ca/**/dist/*.zip</includes>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptor>src/main/assembly/zip.xml</descriptor>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<!-- this is used for inheritance merges -->
<phase>package</phase>
<!-- append to the packaging phase. -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
这里是assembly/zip.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<assembly>
<id>bin</id>
<formats>
<!-- formato de salida del empaquetado -->
<format>zip</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<fileSets>
<fileSet>
<outputDirectory>/</outputDirectory>
<directory>target/dependency</directory>
<includes>
<include>/**/dist/*.zip</include>
</includes>
<useDefaultExcludes>true</useDefaultExcludes>
</fileSet>
</fileSets>
</assembly>
但这是尊重我原来的 zip 的文件夹结构,所以结果是:
ZIP CONTENT
ca\mod1\dist\mod1.zip
ca\mod2\dist\mod2.zip
...
ca\modn\dist\modn.zip
这似乎是一个小问题,但模块的数量很大,收集不同的 zip 文件非常烦人,不得不浏览每个文件夹。我一直在为assembly 和dependency 苦苦挣扎,但还没有找到实现我想要的方法。请注意,我使用的是通配符 (ca/**/dist/*.zip),因为在编译之前我不知道将存在的文件的名称。
有什么帮助吗?
【问题讨论】:
-
作为一种解决方法,您是否考虑过为每个模块使用单独的
fileSet?您可以在directory中包含target/dependency/mod1/dist之类的路径,并且只包含*.zip。 -
我不能,我的模块数量是动态的,我需要 pom 保持静态:(