2012-08-01 64 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> 

這種方式,運行的主要聚甲醛時,您將能夠訪問該子項目的內容和複製的資源,以特定的文件夾。 希望它有幫助..