我有一个多模块项目,我用tycho构建每个项目。一切包括阶段"安装"工作得很好。每个模块都会产生一个人工制品,这些工件安装在我当地的maven存储库中......大约有10件文物。
现在,如果构建成功,我想让maven另外将所有10个文物复制到本地目录。最后,当我重建我的应用程序时,我应该只看到一个包含所有(更新的)文物的目录。
顺便问一下,大公司如何将他们的产品从maven存储库中取出来?
答案 0 :(得分:2)
您可以在项目中定义聚合器模块,该模块依赖于所有其他项目,然后使用maven-dependency-plugin
收集所有jar
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-libs</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<includeScope>runtime</includeScope>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>true</overWriteSnapshots>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
当然,您可以使用相同的插件收集启动脚本等资源文件。创建另一个执行
<execution>
<id>copy-sh-files</id>
<phase>package</phase>
<goals>
<goal>unpack-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/scripts</outputDirectory>
<includes>bin/*.sh</includes>
</configuration>
</execution>
要将所有内容整合到一个zip中,您必须在src/assembly/zip.xml
中使用该内容创建一个程序集文件
<assembly>
<id>zip</id>
<formats>
<format>zip</format>
</formats>
<fileSets>
<fileSet>
<directory>src/bin</directory>
<outputDirectory>.</outputDirectory>
<includes>
<include>*.cmd</include>
</includes>
<lineEnding>dos</lineEnding>
</fileSet>
<fileSet>
<directory>target/lib</directory>
<outputDirectory>lib</outputDirectory>
<includes>
<include>*.jar</include>
</includes>
</fileSet>
</fileSets>
</assembly>
并将maven-assembly-plugin
添加到您的构建插件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptor>src/assembly/zip.xml</descriptor>
<finalName>yourProjectFinalName</finalName>
</configuration>
<executions>
<execution>
<id>zip-bundle</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
所有这些配置只是一种方法,但它是一个良好的开端。大公司通常对其包装有各种要求,包括安装人员等,因此没有一刀切的解决方案,而且通常是一个完成最终解决方案的过程。