我的产品中有多个Java项目(打包到jar),它们只有一个pom
组合成模块。每个项目都有不同的依赖关系,它们的组合依赖关系在父pom
中定义。我想为生产准备输出并执行以下操作:
任何人都知道如何做到这一点,而无需为所有项目手动复制以上各项?我还希望我未来的项目能够支持这种部署过程,而不必过于努力和具体。
答案 0 :(得分:2)
你需要使用Maven程序集插件 - 这里是压缩分配的例子(生产时你需要解压缩):
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptors>
<descriptor>${project.basedir}/src/main/assembly/assembly.xml</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
</plugin>
和汇编XML
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
<id>${env}</id>
<formats>
<format>zip</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<useProjectArtifact>false</useProjectArtifact>
<includes>
<include>com.mycompany:ear-project</include>
<include>com.mycompany:jnlp-project</include>
</includes>
<outputDirectory>libs</outputDirectory>
</dependencySet>
</dependencySets>
<fileSets>
<fileSet>
<directory>src/main/resources</directory>
<outputDirectory>/</outputDirectory>
</fileSet>
<fileSet>
<directory>target/docbook/pdf</directory>
<includes>
<include>index.pdf</include>
</includes>
<outputDirectory>/</outputDirectory>
</fileSet>
</fileSets>
请注意,对于您的2个项目(EAR,JNLP),您可以通过 outputDirectory 配置放置依赖项。
答案 1 :(得分:0)
我的项目有相同的要求。
使用Jenkins与ClearCase和SVN之间存在差异。 如果您使用的是SVN,那么您应该将项目检出到主项目中,然后就像在同一个目录上一样对它们进行处理。
签出我的子项目后,我可以处理它们,在示例中,您可以看到assembly.xml中的一部分,其中核心和调度程序是子项目。
</fileSet>
<fileSet>
<directory>./core/src/main/resources/</directory>
<outputDirectory>./examples</outputDirectory>
<includes>
<include>*</include>
</includes>
</fileSet>
<fileSet>
<directory>./scheduler/src/main/resources/</directory>
<outputDirectory>./examples</outputDirectory>
<includes>
<include>*</include>
</includes>
</fileSet>
这基本上将资源文件夹内容复制到主项目示例项目中。
您可以在此处执行相同操作,如果所有项目都在同一个vob上并且可用,则应指定要将所有资源复制到的相对位置。 例如:
</fileSet>
<fileSet>
<directory>../../../your_sub_project1/src/main/resources/</directory>
<outputDirectory>./examples</outputDirectory>
<includes>
<include>*</include>
</includes>
</fileSet>
<fileSet>
<directory>../../../your_sub_project2/src/main/resources/</directory>
<outputDirectory>./examples</outputDirectory>
<includes>
<include>*</include>
</includes>
</fileSet>
这样,在运行主pom时,您将能够访问子项目的内容并将资源复制到某个文件夹。 希望它有所帮助..
答案 2 :(得分:0)
除了Andrey Borisov的回答之外,我将总结我在汇编XML中做的事情(回答我的所有问题)。
将配置文件(在src / main / resources下找到)从所有项目复制到第三个文件夹。 [使用“fileset”元素]
http://maven.apache.org/xsd/assembly-1.1.2.xsd“&GT; 箱子 DIR 假
<moduleSets>
<moduleSet>
<useAllReactorProjects>true</useAllReactorProjects>
<binaries>
<outputDirectory>modules</outputDirectory>
<unpack>false</unpack>
</binaries>
</moduleSet>
</moduleSets>
<dependencySets>
<dependencySet>
<useProjectArtifact>false</useProjectArtifact>
<outputDirectory>lib</outputDirectory>
</dependencySet>
</dependencySets>
<fileSets>
<fileSet>
<directory>my DIR 1</directory>
<excludes>
<exclude>*log4j*</exclude>
</excludes>
<outputDirectory>resources</outputDirectory>
</fileSet>
<fileSet>
<directory>my DIR 2</directory>
<outputDirectory>resources</outputDirectory>
</fileSet>
</fileSets>