2015-12-23 34 views
2

我有一個標準的POM和罐子包裝項目。 標準-jar是這個項目的理想工件。有沒有辦法在maven項目中只使用枚舉或接口創建jar文件?

除了這個項目的所有類的標準jar我只需要創建一個額外的jar與它聲明的枚舉。

如果我能夠生成這個jar在一個不同的artifactId maven標準將是一個加號。

這裏Create several jar files from single project using maven這個問題將是一個很好的起點,但沒有答案

任何想法?

+0

只要找到了這個 http://blog.sonatype.com/2010/01/how -to-create-two-jars-from-one-project-and-why-you-shouldnt /#。VnsFVXyrSis與某些命名約定可能有所幫助。 測試選項現在 –

+0

多項目構建是Maven中的一件事情。 – Powerlord

回答

0

我建議你把你的類分解成兩個maven構件:一個與Enums和Interfaces作爲另一個的依賴關係,它有你的實現。既然每個人都有自己的POM,你就會得到兩個罐子。

3

最好的選擇是有一個Maven多模塊構建。

通常,它由單個父模塊和多個子模塊組成。

父模塊的包裝應該是「pom」,它只會充當子模塊的容器。

母公司的pom.xml會是這個樣子:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 

    <modelVersion>4.0.0</modelVersion> 
    <groupId>your groupID</groupId> 
    <artifactId>artifact</artifactId> 
    <version>1.0</version> 
    <packaging>pom</packaging> 
    <name>Name</name> 
    <modules> 
     <module>submodule1</module> 
     <module>submodule2</module> 
    </modules> 
</project> 

每個模塊應該是一個子目錄的名稱。這些子目錄將包含他們自己的pom.xml文件。

請注意,groupId,artifactIdversion稍後會用到,因此它們應該是有意義的。

你的兩個子模塊應該像正常jar包裝POM文件有一些例外:

  1. 每個模塊應該有一個<parent>元素指向<groupId><artifactId>和父模塊的<version>。雖然本節不是嚴格必要的,但它確實允許您定義父模塊中的通用依賴項。
  2. 常規模塊將enum模塊作爲依賴項。您可以像其他依賴項一樣聲明它,但請注意,Maven按的順序編譯模塊,因此enum模塊應該首先位於父pom中。
0

我最終使用配置文件來管理解決方案解決方案。一個管理Maven-jar-plugin插件和其他maven-source-plugin插件。

<profiles> 
    <profile> 
    <id>enum</id> 
    <build> 
    <plugins> 
     <plugin> 
      <artifactId>maven-jar-plugin</artifactId> 
      <configuration> 
      <classifier>enum</classifier> 
       <includes> 

        <include>**/*Enum**</include> 
        <!-- or any other way to math my artifacts --> 
       </includes> 
      </configuration> 
     </plugin> 
     </plugins> 
    </build> 
    </profile> 
    <profile> 
     <id>enum-sources</id> 
     <build> 
     <plugins> 
      <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-source-plugin</artifactId> 
      <version>${mavenSourcePluginVersion}</version> 
      <executions> 
       <execution> 
       <id>attach-sources</id> 
       <goals> 
        <goal>jar-no-fork</goal> 
       </goals> 
       </execution> 
      </executions> 
       <configuration> 
       <classifier>enum-sources</classifier> 
        <includes> 
         <include>**/*Enum**</include> 
         <!-- or any other way to math my artifacts --> 
        </includes> 
       </configuration> 
      </plugin> 
     </plugins> 
     </build> 
    </profile> 
</profiles> 

這樣我可以使用

mvn install -Penum 

僅與枚舉 和

mvn install -Penum-sources 

以生成所述罐子以產生與所述源的廣口瓶中。

包括在其他Maven項目這依賴你只需要指定與分類的配置文件,如

<dependency> 
    <groupId>${groupId}</groupId> 
    <artifactId>{artifactId}</artifactId> 
    <version>${version}</version> 
    <classifier>enum</classifier> 
</dependency> 

<dependency> 
    <groupId>${groupId}</groupId> 
    <artifactId>{artifactId}</artifactId> 
    <version>${version}</version> 
    <classifier>enum-sources</classifier> 
</dependency> 
相關問題