2012-07-05 130 views
2

我創建了一個C/S框架作爲多模塊Maven項目。它有三個模塊:「服務器」,「客戶端」和「通用」。 「通用」模塊中的類用於「服務器」和「客戶端」。Maven多模塊項目編譯

但是我不想單獨使用common.jar。相反,我希望將「通用」模塊中的類直接編譯爲server.jarclient.jar。有什麼辦法可以做到嗎?

回答

0

使用maven assembly plugin with pre-defined descriptor jar-with-dependencies

選項1: 包含在 '服務器' 項目的pom.xml如下:

<build> 
    <plugins> 
     <plugin> 
     <artifactId>maven-assembly-plugin</artifactId> 
     <version>2.3</version> 
     <configuration> 
      <descriptorRefs> 
      <descriptorRef>jar-with-dependencies</descriptorRef> 
      </descriptorRefs> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 

這將包括其他第三方的依賴,以及,如果您有任何。

選項2: 此選項用於排除第三方庫(如果有)。

1.在pom.xml的同一個目錄下按如下所示創建一個assembly.xml。

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd"> 
    <id>custom</id> 
    <formats> 
     <format>jar</format> 
    </formats> 
    <dependencySets> 
     <dependencySet> 
      <outputDirectory>/</outputDirectory> 
      <useProjectArtifact>true</useProjectArtifact> 
      <unpack>true</unpack> 
      <scope>runtime</scope> 
      <includes> 
       <include>common</include> 
      </includes> 
     </dependencySet> 
    </dependencySets> 
</assembly> 

的包括標籤必須包含<groupId>:<artifactId>格式,這裏只是artifactId的「共同」被提及,因爲我不知道你的groupId。

在 '服務器' 的pom.xml 2.Include以下:

<build> 
    <plugins> 
     <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <version>2.3</version> 
      <configuration> 
       <descriptors> 
        <descriptor>assembly.xml</descriptor> 
       </descriptors> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

運行組件命令(組件:單)。

0

完成此操作的最佳方法是使用maven-shade-plugin

添加到您的服務器/客戶端POM:

<project> 
    ... 
    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-shade-plugin</artifactId> 
       <version>1.7.1</version> 
       <configuration> 
       </configuration> 
       <executions> 
        <execution> 
         <phase>package</phase> 
         <goals> 
          <goal>shade</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 
    ... 
</project> 

您將結束與common類在同一個罐子作爲server/client