2012-06-27 62 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