2012-08-01 61 views
2

我的产品有多个Java项目(打包成罐子),它们有一个组合为模块的单个pom。每个项目都有不同的依赖关系,并且它们的组合依赖关系在父项pom中定义。我想,制备用于制作输出并执行以下操作:在Maven部署用于生产的罐子

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

任何人都知道如何做到这一点,而无需手动复制上述所有项目的每一个?我也希望我的未来项目能够支持这个部署过程,而不必过于努力和具体。

回答

0

我将总结除了安德烈鲍里索夫的答案之外,我在汇编XML中做了什么(以回答我所有的问题)。

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

    http://maven.apache.org/xsd/assembly-1.1.2.xsd“> 仓 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> 
    

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配置来放置依赖关系。

+0

我试过了你的代码模板,并得到了一些工作依赖,主要问题仍然是resources文件夹,当使用“filesets”元素时,我需要指定确切的资源文件夹来复制。我想自动复制项目的所有子模块的所有内容,而无需手动指定目录和/或文件名。 – Omri 2012-08-02 06:45:48

+0

你使用詹金斯吗? – Tomer 2012-08-02 07:26:09

+0

是的。我确实使用詹金斯。 – Omri 2012-08-02 08:19:37

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> 

这种方式,运行的主要聚甲醛时,您将能够访问该子项目的内容和复制的资源,以特定的文件夹。 希望它有帮助..