【问题标题】:Bundling a non-open-source dependency with Maven使用 Maven 捆绑非开源依赖项
【发布时间】:2012-06-28 19:10:07
【问题描述】:

假设我在 Maven / Eclipse 中有两个 Java 项目:

  • 托管在 GitHub 中的开源应用程序
  • 一个包含实用功能的小型私有库,开源(但我有权修改、构建和以编译形式重新分发,例如作为 .jar 文件)

我想让其他人能够构建、修改和运行应用程序(如果他们愿意,还可以回馈开源项目!),但这意味着他们也需要该库作为依赖项。

我想让事情变得简单,以便我自己和应用程序的用户都可以轻松构建。

最实用的方法是什么?

【问题讨论】:

    标签: java eclipse maven open-source dependencies


    【解决方案1】:

    使用 Maven 时,建议使用 Maven 存储库管理器(例如 Nexus)并按照此处所述配置您的设置文件:

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

    在您的情况下,这具有额外的好处,您可以使用 Maven 存储库管理器来托管任何私有工件。

    【讨论】:

    • hmmm 但在这种情况下,我希望公共开源用户能够使用该工件(最好不要破解他们的设置)。有什么办法吗?
    • 你永远不能确定有人不会滥用你的 jar(反编译)
    • 例如对于 Nexus,您必须让每个人都可以访问公共组(如果您使用公共 IP 地址/域,我认为这是默认设置)并确保您的私有库的托管存储库位于该公共组中。然后其他用户可以在他们自己的 Maven 存储库管理器中代理您的存储库。
    【解决方案2】:

    在 GitHub 上提供您自己的 Maven 存储库以分发封闭源代码库,您可以重新分发并从您的项目 (pom.xml) 中引用它。

    http://cemerick.com/2010/08/24/hosting-maven-repos-on-github 很好地介绍了如何在 GitHub 上设置存储库。您应该注意该帖子中还提到的此类微存储库的注意事项。

    【讨论】:

    • 有什么方法可以了解谁或有多少人从 github 下载工件?看起来 github 只在您克隆 repo 时收集统计信息。
    【解决方案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>
    

    注意:系统依赖不是传递性的!

    来自文档

    这个范围类似于提供的,除了你必须提供明确包含它的 JAR。工件始终可用,不会在存储库中查找。

    【讨论】:

    • 谢谢,非常有用。如果我重建库项目,是否有自动更新库 jar 文件的好方法?
    • 这是一个简单的解决方案,但显然不是更好,因为传递性问题。但它满足了请求...
    • @mikera 我不知道如何简化库更新。如果您的库将在新版本中发布,您必须做一些事情 - 即使使用存储库方法。您必须在 pom.xml 中更新依赖项的版本号(假设您不使用使构建无法重现的版本范围)。
    • @Jean-Rémy 如果有人喜欢让事情变得简单并且正在寻找最实用的方法我怀疑设置(和维护)提供单一依赖项的公共存储库是最佳且明显的解决方案。当然,使用system 作用域应该是罕见的例外,您应该了解其中的陷阱。
    猜你喜欢
    • 1970-01-01
    • 2015-12-03
    • 2015-10-04
    • 2012-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-12
    相关资源
    最近更新 更多