2012-12-13 67 views
14

我可以部署jar在下面我pom.xml和運行mvn deployMaven的使用部署罐子依賴於回購

<distributionManagement> 
    <repository> 
     <id>releases</id> 
     <url>http://${host}:8081/nexus/content/repositories/releases</url> 
    </repository> 
    <snapshotRepository> 
     <id>snapshots</id> 
     <name>Internal Snapshots</name> 
     <url>http://${host}:8081/nexus/content/repositories/snapshots</url> 
    </snapshotRepository> 
</distributionManagement> 

,我還可以使用生成可執行jar-with-dependencies如下:

 <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <executions> 
       <execution> 
        <id>create-executable-jar</id> 
        <phase>deploy</phase> 
        <goals> 
         <goal>single</goal> 
        </goals> 
        <configuration> 
         <descriptorRefs> 
          <descriptorRef>jar-with-dependencies</descriptorRef> 
         </descriptorRefs> 
         <archive> 
          <manifest> 
           <mainClass>my.company.app.Main</mainClass> 
          </manifest> 
         </archive> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

問題是我不知道如何縫合這些以將可執行文件jar部署到我的Maven回購。我不知道這是通過一個新的插件完成的,還是通過向現有的程序集插件添加一個目標或其他步驟來完成的。

+1

有意思......所以你想要一個包含所有依賴關係('jar-with-dependencies')的單個jar到nexus?我假設你將它部署到生產環境時,這個jar將是獨立的(因爲它內部嵌入了所有的依賴)? –

回答

0

本質上,我的這個難題表明我的pom.xml已經離軌了。一切都會自行解決。我以前是這樣做的:

  • 保存所有的依賴關係到一個lib文件夾
  • 建立了類路徑啜了那個lib文件夾
  • 使用Assembly插件再拍部署JAR
罐子

我認爲這種方式有一定的道理,特別是當我的圖書館不適合我的應用程序時。

但是,通過刪除1和2,所需的全部是distributionManagement部分,並且部署階段自動運行。總而言之,這是一個通過刪除大量代碼而直接添加功能的驚人案例。

+3

我有* jar-with的相同症狀-dependencies.jar不會被部署推送。我的問題是插件的配置不正確 - 我必須按照文檔(http://maven.apache.org/plugins/maven-assembly-plugin/usage.html) – ahains

+0

@ahains中所述綁定到包階段,謝謝!這是一個更好的解決方案。請回答這個問題,以便我真的可以讚揚你:) – Karussell

3

以下工作。我打算讓這個問題開放一點,因爲我不積極,這是最好的做法,但工作是一些東西。

我注意到的問題是我編寫了ID名稱,我不知道這是否是慣例,並且我必須對jar名稱進行硬編碼;它不是從其他任何東西推斷出來的。

<plugin> 
<artifactId>maven-deploy-plugin</artifactId> 
<version>2.7</version> 
<executions> 
    <execution> 
     <id>deploy-executable</id> 
     <goals> 
      <goal>deploy-file</goal> 
     </goals> 
     <configuration> 
      <file>target/Monitoring-Client-1.0-SNAPSHOT-jar-with-dependencies.jar</file> 
     </configuration> 
    </execution> 
</executions> 
</plugin> 
+0

看起來不錯,但不幸地不適合我:無法執行目標org.apache.maven.plugins:maven-deploy-plugin:2.8.2:項目上的deploy-file(default-cli)BackofficeSmokeTest:參數文件','url'for goal org.apache.maven.plugins:maven-deploy-plugin:2.8.2:部署文件丟失或無效 - > [Help 1] –

4

爲了構建一個(所謂的)尤伯杯JAR和使用maven,你也可以使用shade plugin部署。以下代碼取自他們的網站,但我已經使用此功能製作了一個或兩個項目。

<project> 
    ... 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-shade-plugin</artifactId> 
     <version>2.0</version> 
     <executions> 
      <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>shade</goal> 
      </goals> 
      <configuration> 
       <shadedArtifactAttached>true</shadedArtifactAttached> 
       <shadedClassifierName>jackofall</shadedClassifierName> <!-- Any name that makes sense --> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
    ... 
</project> 

在這種配置中,您獲得尤伯杯JAR作爲除了正常的JAR一個部署。然後,您的JAR用戶可以決定使用基於分類器的依賴關係來提取all-in-one包或JAR。

我通常會使用陰影插件來構建高級JAR(或以某種方式修改JAR)並使用程序集插件來構建安裝包(包含JAR和其他可能的東西)。但我不確定單個插件的預期目標是什麼。

0

首先,您不應該在部署階段創建ueber jar,最好在包階段執行此操作。此外,創建的jar文件通常會自動附加到您的工件上,並將轉移到遠程存儲庫(在您的案例中爲Nexus)。如果您只是嘗試執行mvn安裝並查看輸出結果(如果創建的jar安裝在本地存儲庫中),則可以檢查這一點。 要將結果部署到nexus中,您需要調用mvn deploy。

<plugin> 
     <artifactId>maven-assembly-plugin</artifactId> 
     <configuration> 
      <archive> 
       <manifest> 
        <mainClass>my.company.app.Main</mainClass> 
       </manifest> 
      </archive> 
      <descriptorRefs> 
       <descriptorRef>jar-with-dependencies</descriptorRef> 
      </descriptorRefs> 
     </configuration> 
     <executions> 
      <execution> 
       <id>make-assembly</id> <!-- this is used for inheritance merges --> 
       <phase>package</phase> <!-- bind to the packaging phase --> 
       <goals> 
        <goal>single</goal> 
       </goals> 
      </execution> 
     </executions> 
    </plugin> 

Thenn只需運行mvn clean install deploy到:

3

如果將組件綁定到包裝階段,它會在你的倉庫,當你做一個構建同時安裝了「常規」罐子和用依賴性罐子將兩個罐子都上傳到你的庫中