Maven解压缩以忽略原始文件夹
我的一个项目具有这样的结构:
One of my projects has a structure like this:
.\ca\<modulename>\dist\<modulename>.zip
我想制作一个仅包含zip文件的软件包,因此,如果我有子模块mod1
,mod2
,modn
,我将得到:
I want to make a package that just has the zip files in a single package, so if I have submodules mod1
, mod2
, modn
, I'll end up with:
ZIP CONTENT:
mod1.zip
mod2.zip
...
modn.zip
到目前为止,我所做的是创建一个maven项目,并使用maven dependency
和assembly
插件达到了这一目的:
What I've done so far is create a maven project and, using maven dependency
and assembly
plugins I got to this:
<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的文件夹结构,因此结果是:
But this is respecting my original zip's folder structure, so the result is:
ZIP CONTENT
ca\mod1\dist\mod1.zip
ca\mod2\dist\mod2.zip
...
ca\modn\dist\modn.zip
这似乎是个小问题,但是模块的数量很大,而且必须浏览每个文件夹非常麻烦.我一直在为assembly
和dependency
苦苦挣扎,但还没有找到实现我想要的方法的方法.请注意,我正在使用通配符(ca/**/dist/*.zip
),因为在编译之前我不知道将存在的文件名.
It might seem a small issue but the number of modules is big and gathering the different zip files is very annoying having to browse through every folder. I've been struggling with assembly
and dependency
but haven't found a way to achieve what I want. Note that I'm using wildcards (ca/**/dist/*.zip
) because I don't know prior to compilation the name of the files that will be there.
有什么需要帮助的吗?
Any help please?
我不知道是否有办法做到这一点,但是这个问题可能会帮助您找到解决方法:
I don't know if there's a way to do this but this question might help you find a way through : execute ant / groovy script inside maven
根据链接的答案,这是一个使用maven ANT插件的ANT示例(我现在无法尝试):
According to the linked answer, here is an ANT example (I can't try it right now) with the maven ANT plugin :
<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>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
<id>move</id>
<phase>generate-sources</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<copy todir="${project.basedir}/target/dependency" flatten="true">
<fileset dir="${project.basedir}/ca">
<include name="**/dist/*.zip"/>
</fileset>
</copy>
</target>
</configuration>
</execution>
</executions>
</plugin>
...
</plugins>
至少,为了确保插件在同一阶段的执行顺序,至少需要Maven 3.0.3版本.
At least, the version 3.0.3 of Maven is required in order to insure plugins execution order on same phase.