mercurial - 在 Maven 中使用闭源依赖项

标签 mercurial maven wagon

我有一个想使用 Maven 构建的闭源项目。它依赖于两个 java 库,这些库在我能够找到的任何公共(public)存储库中都不可用(在本例中为 libGoogleAnalytics.jar 和 FlurryAgent.jar,但该问题适用于任何闭源依赖项)。

我希望我组织中的任何人都能够使用与我用于构建应用程序的依赖项的完全相同版本来构建应用程序。这包括我的同事和我们的构建服务器。

如何管理 maven 不知道如何解决的闭源依赖项?

显然,我可以到每个人的机器上手动执行“mvn install:install-file”以将二进制文件放入他们的 maven 存储库,但是像这样手动管理依赖项会破坏依赖项管理器的目的。

根据 maven 的 Internal Repositories文档,我可以在某个地方建立一个存储库服务器并将二进制文件放在那里,然后所有开发人员都可以访问它。但这意味着我要维护一个新服务器(或至少在现有服务器上建立一个新网站)。这也意味着我必须担心权限以确保外部各方无法访问存储库。这也意味着我现在必须担心备份和可用性,这样如果存储库不可用,开发人员就不会遇到问题。

如果我能以某种方式使用我们现有的 scm(在这种情况下是 hg,但它可能是 git 或 svn 或其他)来存储依赖项,那么所有这些问题对我来说都会消失。我们的源代码控制存储库已经备份,基本上总是可供开发人员使用,并且已经处理了它的权限。

但是我还没有弄清楚如何使用 hg 管理 maven 依赖项,如果这可能的话。

最佳答案

事实证明,曼弗雷德的回答对我不太适用。该应用程序已编译,但由于缺少所需的谷歌分析类,它没有在我的 Android 设备上运行。

根据他提供的链接,我发现了 this solution这实际上有点清洁并且工作正常。

总之,我在 pom.xml 中添加了以下依赖项。 groupId、artifactId 和 version 都是我使用合理的值组成的:

<dependencies>
    ...
    <dependency>
        <groupId>com.google.android.apps.analytics</groupId>
        <artifactId>libGoogleAnalytics</artifactId>
        <version>1.1</version>
    </dependency>
    <dependency>
        <groupId>com.flurry</groupId>
        <artifactId>FlurryAgent</artifactId>
        <version>1.24</version>
    </dependency>
</dependencies>

然后,我添加了一个存储库定义,用于在项目的源代码树中存储第三方依赖项的位置:
    <repository>
        <id>third.party.closed.source.repo</id>
        <url>file://${basedir}/../maven_repo_3rd_party</url>
    </repository>

然后我将 jar 文件移动到以下位置:
./maven_repo_3rd_party/com/google/android/apps/analytics/libGoogleAnalytics/1.1/libGoogleAnalytics-1.1.jar
./maven_repo_3rd_party/com/flurry/FlurryAgent/1.24/FlurryAgent-1.24.jar

一旦我这样做了,我的项目编译和运行就好像第三方依赖项是从官方 maven repo 解决的一样。

关于mercurial - 在 Maven 中使用闭源依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4959007/

相关文章:

file - Mercurial:在提交或推送时更新文件

version-control - Mercurial:在一个存储库中的分支之间 merge 一个文件

c# - 为什么此 C# 代码不起作用?我正在尝试将 shell 的输出读取到 TortoiseHG (Mercurial)

java - Maven testResource 过滤在 pom.xml 中不起作用

maven-2 - 使用 Maven 通过 SCP 上传文件失败

Mercurial:在没有公共(public)阶段的情况下从远程存储库中提取更改(非发布服务器, "abort: can' t rebase 不可变变更集”)

maven - Jenkins tomcat7部署错误

Maven选择不一致版本的间接依赖: why,以及如何防止?

java - 我无法使用 apache-maven3.2.2 构建项目