使用Maven的闭源依赖

emm*_*mby 10 mercurial maven wagon

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

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


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

显然,我可以去每个人的机器并手动执行"mvn install:install-file"以将二进制文件放入他们的maven存储库,但是手动管理依赖关系会破坏依赖关系管理器的目的.

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

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

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

emm*_*mby 10

事实证明,曼弗雷德的答案并不适合我.该应用已编译,但由于缺少所需的Google分析类,因此无法在我的Android设备上运行.

根据他提供的链接,我发现这个解决方案实际上有点清洁并且工作正常.

总之,我将以下依赖项添加到我的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>
Run Code Online (Sandbox Code Playgroud)

然后我添加了一个存储库定义,用于存储项目源代码树中的第三方依赖项:

    <repository>
        <id>third.party.closed.source.repo</id>
        <url>file://${basedir}/../maven_repo_3rd_party</url>
    </repository>
Run Code Online (Sandbox Code Playgroud)

然后我将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
Run Code Online (Sandbox Code Playgroud)

一旦我这样做,我的项目编译和运行就好像第三方依赖关系是从官方maven仓库解决的.


Man*_*ser 5

虽然我真的认为你应该使用一个专用的存储库服务器而Sean Patrick完全正确,但这是一个让它工作的黑客.

将jar文件放在libs文件夹中就像你过去所做的那样(记住Ant .. ouch)..然后使用范围系统和路径声明每个jar的依赖关系.

我可以在这里描述一个例子

http://www.simpligility.com/2010/01/how-to-mavenize-a-typical-web-application-build-jasperserver-3-7-sample-webapp/

具体而言,依赖性将例如看起来像这样

<dependency>
  <groupId>jasperreports</groupId>
  <artifactId>jasperreports-chart-themes</artifactId>
  <version>3.7.0</version>
  <scope>system</scope>
  <systemPath>${project.basedir}/src/main/webapp/WEB-INF/lib/jasperreports-chart-themes-3.7.0.jar</systemPath>
</dependency
Run Code Online (Sandbox Code Playgroud)

哦,现在我告诉你如何做到这一点,请记住,这是一个不好的做法,并有一堆问题,但它会工作......