2009-07-09 61 views
2

該項目是一個包含核心庫代碼,測試和示例代碼的庫。在構建過程結束後,應建立以下檔案:使用maven的示例代碼存檔

  • xy-1.1.0-core.jar
  • xy-1.1.0-tests.jar
  • xy-1.1.0-examples.jar

什麼是與Maven此設置的最佳方法是什麼? 目前的設置是:

src 
src/main/java 
src/examples/java 
src/test/java 

此外,還應該包含所有依賴關係的lib目錄。 xy-jar,庫罐和其他腳本應該打包到發佈文件xy-1.1.0.tar.gz中。

+0

我不同意這個問題不具有建設性 - 我發現這些答案對您在Maven的約定中提供給您的選項有幫助。認爲這可能是過度積極適度的情況。 – cwash 2012-10-22 14:31:19

回答

5

Maven的一個重大優勢(或缺點,取決於你與誰交談)是「約定優於配置」 - 這意味着當你有選擇嘗試將你的應用程序撬入Maven或試圖撬開Maven到您的應用程序 - 將應用程序撬入Maven通常會更容易。

它可能會更容易打破你的單一的「工程」分爲兩個Maven項目 - 核心和實例。 Maven將「項目」視爲創建單個工件的東西 - 也就是JAR文件,WAR文件,EAR文件等等(這裏有一些例外情況 - 比如測試jar,但我們稍後會討論)。將「示例」作爲模塊,子項目或獨立項目依賴於「核心」項目可能會更容易。

,那麼「測試」部分包含唯一的「核心」,或「核心」和「實例」測試?如果它只是核心,那麼你需要把它移到核心項目的測試目錄中。如果兩者都是,那麼您將需要將其拆分並將單元測試移至相應的項目中。

您可以通過配置Maven的JAR-插件作爲guide to attached tests詳細生成的項目的測試代碼JAR。

Maven將通過Maven構建的所有程序的所有依賴關係保存在「本地存儲庫」中 - 通常存儲在%user_directory%/。m2下的許多目錄中 - 您可以讓Maven將項目的所有依賴項複製到指定的目錄通過使用dependency:copy-dependencies詳細描述在dependency plugin page上。

要建立你打算使用以前的項目,以建立一個Assembly最後的焦油。

2

內特涵蓋這在大多數情況下,但我給具體的例子。

這是你的目錄佈局應該什麼樣子:

pom.xml 
src/main/assembly/assembly.xml 
core/pom.xml 
core/src/main/java/... 
core/src/test/java/... 
examples/pom.xml 
examples/src/main/java/... 

在基本POM,你會表示你的子模塊如下:

<modules> 
    <modules>core</modules> 
    <modules>examples</modules> 
</modules> 

假設你的基地的groupId是「com.company 。例如,」和你的artifactId是‘XY’,那麼你的模塊勁歌將以以下(調整名稱和版本,當然)開始:

<parent> 
    <groupId>com.company.example</groupId> 
    <artifactId>xy</artifactId> 
    <version>1.0.0-SNAPSHOT</version> 
</parent> 
<groupId>com.company.example</groupId> 
<artifactId>xy-core</artifactId> 
<version>1.0.0-SNAPSHOT</version> 

要確保裝配在基礎項目運行,包括:按照您的生成配置:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.1</version> 
    <configuration> 
    <descriptors> 
     <descriptor>src/main/assembly/assembly.xml</descriptor> 
    </descriptors> 
    </configuration> 
</plugin> 

此外,搭建測試類獨立的罐子,這增加了核心/ pom.xml文件:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    <executions> 
    <execution> 
     <goals> 
     <goal>jar</goal> 
     <goal>test-jar</goal> 
     </goals> 
    </execution> 
    </executions> 
</plugin> 

的assembly.xml本身的Wi LL看起來像這樣:

<assembly> 
    <id>assembly</id> 
    <formats> 
    <format>tar.gz</format> 
    </formats> 
    <includeBaseDirectory>false</includeBaseDirectory> 
    <moduleSets> 
    <moduleSet> 
     <binaries> 
     <dependencySets> 
      <dependencySet> 
      <outputDirectory>lib</outputDirectory> 
      </dependencySet> 
     </dependencySets> 
     <outputDirectory>lib</outputDirectory> 
     </binaries> 
    </moduleSet> 
    </moduleSets> 
</assembly> 

我可能在這裏失去了一些東西,但是這是一般的想法。