簡體   English   中英

將第三方庫安裝到托管Maven存儲庫的最佳實踐?

[英]Best practices for installing 3rd party libraries into your hosted Maven repository?

假設您有一個使用第三方庫的項目,例如Google的Analytics Data API(gdata) ,它似乎當前沒有部署到任何知名或流行的Maven公共存儲庫/索引中。 這不是什么大問題,因為我可以將工件部署到我的本地托管的Nexus存儲庫中。

但是,Maven社區中是否有任何最佳實踐,我應該如何命名這個庫在我的POM中的“坐標”,因為標准尚未在公共存儲庫中設置呢?

例如,我應該在我的POM中引用它

<dependency>
    <groupId>com.google</groupId>
    <artifactId>gdata-analytics</artifactId>
    <version>1.0</version>
</dependency>

還是有一些更好/更標准的方式讓我想出artifactId

(而且,為什么像谷歌這樣的幾十家圖書館的提供商不會花費一些精力將它們托管到主流的公共Maven存儲庫/索引中呢?這不會讓人們更容易使用它們從而驅動它們采用?)

我已經使用Maven大約一年了,並且從未遇到過“標准”命名約定。 我通常會做你正在做的事情,雖然我盡量使版本號盡可能接近“真實”版本號,以避免在部署多個版本時出現混淆。

你做的很合理。 一些額外的要點:

  • 當Maven從Nexus獲取工件時,該工件被命名為artifactId-version。 GroupId被省略了。 因此,當工件移動(例如,復制到Web應用程序中的WEB-INF / lib)時,您的jar文件將顯示為“ gdata-analytics-1.0 ”。 這通常不是問題。 但是,如果工件名稱非常常見,例如“util”,您可能希望在artifactId中包含組信息,例如使用“ com.google ”的groupId和“ com.google.gdata-analytics ”的artifactId。 是的,重復是令人討厭的,但它會在文件系統和搜索中產生最大的清晰度。 我實際上有一個問題,其中兩個不同的groupId都有一個“ core-1.0 ”jar,一個在構建時被復制到lib目錄時覆蓋了另一個。

  • 我的第二個MattK建議將你的Maven versionId與通常所知的工件版本對齊。

  • 如果您遵循Dominic的建議,將groupId添加為您自己的公司名稱(例如acme),則可以更輕松地利用Nexus的路由功能。 它將確保內部工件的請求不會傳播到Maven Central並最終存儲在他們的日志中(如果您的groupId是“ acme.secret.project ”,這可能很重要!

我傾向於使用我自己常用的groupId為groupId添加前綴。 這清楚地表明它是我上傳的內容,以防萬一它泄露給全世界。

你可能很幸運:Google為自己的項目擁有自己的Maven回購。 見本頁: 說明

我有一些專屬的Jar文件,所以我不得不在每個工作站加載它們(我們還沒有公司共享的回購)。 我將它們放在/ lib目錄中的源代碼樹中(並不總是一個好主意),並添加了一個包含mvn install-file命令的小.BAT文件(或.sh腳本)來加載我的本地機器的repo我建立的時間。 如果我必須更新這些jar,我也會更新“load.bat”文件,然后重新運行它。 在我的情況下,我不希望每年發生一次以上,也許更少。

許多sourceforge項目在groupid中使用項目的名稱,例如:

GroupId net.sf.json-lib ArtifactId json-lib

這可能適用於谷歌示例,因為有很多谷歌文物。

請記住,您可以使用classifer標記來區分同一版本的兩個jar,但是為不同的目的而構建,例如不同的JVM。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM