在Maven中部署用于生产的jar

时间:2012-08-01 07:01:17

标签: java maven deployment dependencies copy

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

  1. 将我的所有罐子部署(复制)到一个位置
  2. 将第三方jar从所有项目复制到另一个单个文件夹
  3. 将配置文件(在src / main / resources下找到)从所有项目复制到第三个文件夹。
  4. 任何人都知道如何做到这一点,而无需为所有项目手动复制以上各项?我还希望我未来的项目能够支持这种部署过程,而不必过于努力和具体。

3 个答案:

答案 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中做的事情(回答我的所有问题)。

  1. 将我的所有罐子部署(复制)到一个位置 [使用“moduleset”元素]
  2. 将第三方jar从所有项目复制到另一个 [使用“dependencySets”元素]
  3. 将配置文件(在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>