2013-07-25 38 views
6

任何幫助或指針都會非常感謝。 我需要在構建時將兩個字段注入到項目的所有依賴項JAR的清單文件中。Maven:修改依賴關係JAR的清單文件

依賴關係jar已經構建並從回購中被取消。 我需要找到一種方法來獲取JAR的Manifest文件,然後使用當前的pom文件中的變量對其進行修改。 有沒有人知道如何做到這一點。 在此先感謝您的時間和回覆

+6

爲什麼你想這樣做,導致這些工件已經建成,換句話說就是不可變的。您可以通過maven-dependency-plugin和maven-assembly-plugin的組合來更改這些工件,但它會產生一個非常大的pom文件。另一方面,你正在改變已經構建的工件,這將違背Maven的想法。 – khmarbaise

+0

@Wimpie你找到解決方案嗎? –

+0

'maven-assembly-plugin'允許你指定清單配置,但是目前有一個[bug](http://jira.codehaus.org/browse/MASSEMBLY-450),它阻止合併現有清單附加清單條目。我發現這是因爲我試圖做同樣的事情並失敗。 – user944849

回答

0

這實際上並不是Maven允許您執行的操作。從Maven的角度來看,每個具有特定名稱的JAR應該與其他具有相同名稱的JAR完全相同。

例如,假設我的項目取決於abc-1.0.jar。我指定了這種依賴關係,因爲ALphabet團隊發佈了一個abc庫,其中包含1.0版本的指定API。我應該可以從世界上任何一個倉庫獲取這個jar文件,甚至當我的互聯網出去並將其手動安裝到我的本地存儲庫時,從街上的鄰居那裏得到這個jar文件,它應該是完全相同的文件。如果它不是相同的文件,那麼我就不能保證jar文件中的.class文件將包含我需要的庫代碼,以使我的構建成功而沒有錯誤。

如果你是真的有動機做這項工作,那麼,這在理論上是可能的。您可以編寫一個腳本,將:

  1. 解析POM XML的properties部分和解析從那裏出來的各個屬性,以及依賴罐子的名字
  2. 對於分類每個依賴罐子「 manifest_injected「,嘗試在本地存儲庫中找到它。如果它不存在,則生成一個具有給定依賴項的空Maven項目(沒有manifest_injected分類器),對其運行mvn validate以確保依賴項已被下載並放置在本地存儲庫中(如果已發現)
  3. 克隆所有的JAR文件,打開克隆,使用你之前解析過的屬性進行清單注入,並將注入的jar保存到Maven倉庫中的適當位置。
  4. 調用傳遞給腳本的Maven構建一個論點。

祝你好運!

0

您可以在二進制存儲庫中輕鬆完成。例如,Artifactory允許您編寫a user plugin that will be triggered on any download。在這個監聽器中,您可以編寫自己的代碼 - 打開jar文件,更改清單文件並提供更改後的jar而不是原始文件(並在下次緩存它)。