2012-06-27 87 views
5

假設我有Maven的/ Eclipse的兩個Java項目:捆綁使用Maven非開源依賴

  • 在GitHub上託管的開源應用程序
  • 一個小型私人圖書館,包括實用功能,這是開源的(但我有權利修改,構建和編譯的形式如重新分配作爲一個.jar文件)

我想有可能使他人建立,修改和運行應用程序(如果他們喜歡,可以回饋給開源項目!),但這意味着他們也需要庫作爲依賴項。

我想讓事情變得簡單,這樣構建對我自己和應用程序的用戶來說都很簡單。

使這項工作最實用的方法是什麼?

回答

3

在GitHub上提供您自己的Maven存儲庫,以分發允許您從項目(pom.xml)重新分發和引用它的封閉源代碼庫。

http://cemerick.com/2010/08/24/hosting-maven-repos-on-github給出了一個很好的介紹如何在GitHub上設置存儲庫。你應該知道這篇文章中提到的微庫的警告。

+0

+1這是更好的方式來做到這一點! –

+0

有沒有什麼方法可以查看誰或多少人從github下載工件?它看起來像github只會在您複製回購時收集統計信息。 – cosbor11

3

當使用Maven建議使用Maven倉庫管理,如Nexus和配置設置文件如下所述:

https://help.sonatype.com/display/NXRM3/Maven+Repositories#MavenRepositories-ConfiguringApacheMaven

在你的情況這額外的好處就是你可以使用Maven Repository Manager來承載任何私人工件。

+0

嗯,但在這種情況下,我希望公共開源用戶能夠使用工件(理想情況下不需要黑客設置)。任何方式做到這一點? – mikera

+0

你永遠不能確定有人不會誤用你的jar(反編譯它) – ant

+0

對於Nexus,您必須讓所有人都可以訪問公共組(我認爲這是您使用公共IP地址/域時的默認組),並確保您的私有庫的主機存儲庫位於該公共組中。其他用戶則可以在您自己的Maven Repository Manager中代理您的存儲庫。 – Puce

3

一個非常簡單的解決方案是將您的私有庫放置到您的項目中(例如<project>/lib/library-1.0.jar),並將其包含爲system依賴項。你可以把它包含在你的pom中。

<dependencies> 
    <dependency> 
     <groupId>my.private</groupId> 
     <artifactId>library</artifactId> 
     <version>1.0</version> 
     <scope>system</scope> 
     <systemPath>${project.basedir}/lib/library-1.0.jar</systemPath> 
    </dependency> 
    </dependencies> 

注意:一個系統的依賴性不transitiv!

從文檔

此範圍相似,除了你必須提供包含它明確的JAR來提供。工件始終可用,並且不會在存儲庫中查找。

+0

謝謝,非常有用。如果我重建庫項目,是否有自動更新庫jar文件的好方法? – mikera

+0

這是一個簡單的解決方案,但因爲傳遞性問題而不是更好。但它滿足了請求... –

+0

@mikera我不知道如何簡化庫更新。如果您的圖書館將以新版本發佈,您必須採取行動 - 即使採用存儲庫方式。您必須在您的pom.xml中更新您的依賴項的版本號(假設您不使用版本範圍,這會使構建不可重現)。 – FrVaBe