2

我的产品中有多个 Java 项目(打包到 jar 中),其中有一个pom将它们组合为模块。每个项目都有不同的依赖项,它们的组合依赖项在 parent 中定义pom。我想为生产准备输出并执行以下操作:

  1. 将我所有的 jar 部署(复制)到一个位置
  2. 将所有项目中的第 3 方 jar 复制到不同的单个文件夹
  3. 将所有项目中的配置文件(位于 src/main/resources 下)复制到第三个文件夹。

任何人都知道一种无需为所有项目手动复制上述各项的方法吗?我还希望我未来的项目能够支持这个部署过程,而不必过于努力和具体。

4

3 回答 3

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配置放置依赖项。

于 2012-08-01T07:09:58.327 回答
0

除了 Andrey Borisov 的回答之外,我还将总结我在程序集 XML 中所做的事情(以回答我所有的问题)。

  1. 将我所有的 jar 部署(复制)到一个位置[使用“moduleset”元素]
  2. 将所有项目中的第 3 方 jar 复制到不同的[使用“dependencySets”元素]
  3. 将所有项目中的配置文件(位于 src/main/resources 下)复制到第三个文件夹。[使用“文件集”元素]

    http://maven.apache.org/xsd/assembly-1.1.2.xsd"> bin dir false

    <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>
    

于 2012-08-08T08:05:03.780 回答
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 时,您将能够访问子项目的内容并将资源复制到某个文件夹。希望能帮助到你..

于 2012-08-02T12:19:48.107 回答