我的一个项目有这样的结构:
.\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
),因为在编译之前我不知道将存在的文件的名称。
请帮忙吗?
答案 0 :(得分:3)
我不知道是否有办法解决这个问题,但这个问题可能有助于您找到解决方法:execute ant / groovy script inside maven
根据链接的答案,这是一个ANT示例(我现在不能尝试)和maven ANT插件:
<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版本。
答案 1 :(得分:0)
是否安装了mod1.zip
,mod2.zip
等,还是可以将它们安装到本地存储库中?您可以使用maven-dependency-plugin
:
<dependencies>
<dependency>
<groupId>com.whatever</groupId>
<artifactId>mod1</artifactId>
<version>1.0.0-SNAPSHOT</version>
<type>zip</type>
<dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.10</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>validate</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.basedir}/dist</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
这会让你回到维护这个依赖列表给定一个动态模块列表,但如果你能弄清楚如何使依赖列表动态化,那么这可能会让你更远。
答案 2 :(得分:0)
您需要在依赖项之间插件:unpack和程序集:单个任务可以展平您的资源。
您可以摆弄资源:复制资源任务,但这可能不会成功,如此处所确认:Maven : copy files without subdirectory structure
对于这种情况,如@Fabien的回答所述,创建了maven ant插件,以调用各种非标准行为。