2010-04-03 259 views
43

当前,我正在测试Gradle作为Maven的替代方案。在我的项目中,有一些第三方的罐子,在任何(Maven)仓库中都没有。我现在的问题是,我怎么管理它将这些罐子安装到我的本地.gradle存储库中。 (如果可能,我不想使用本地Maven仓库,因为Gradle应该独立运行。)目前,由于缺少罐子,我得到了很多例外。在Maven中,运行install命令非常简单。但是,我的谷歌搜索与Maven安装命令类似的东西并不成功。有人有个想法吗?Gradle:使第三方jar可用于本地gradle存储库

回答

3

也许我失去了我从你的问题的阅读的东西,假设你的gradle这个回购是flatDir类型的,你应该能够在文件中出现的形式myjar这一-1.0.jar它们复制并解决作为myjar这一版本1.0。

不知道为什么Gradle需要运行maven才能访问本地的maven仓库。你可以定义maven仓库,它应该解决依赖关系。如果需要,您可以使用gradle upload来推送jar本地或远程maven回购站。在这种情况下,它会执行maven。

1

我觉得这样的事情应该工作:

dependencies { 
    files('yourfile.jar') 
} 

它是否适合你?

+0

确定,对不起天真的问题,但如果我把文件('C:/Temp/myFile.jar')它会工作或我需要添加如此额外的环境变量? – Gabriel 2014-10-03 09:46:51

38

你可以包括你的文件系统JAR依赖关系:

dependencies { 
    runtime files('libs/a.jar', 'libs/b.jar') 
    runtime fileTree(dir: 'libs', include: '*.jar') 
} 

您可以更改编译/ testCompile的/ etc ..运行

+0

如果第三方项目对另一个库具有自己的依赖关系,该怎么办? – dnim 2016-02-14 14:57:06

+0

fileTree是否适用于libs文件夹中的所有子目录。在libs/sping/spring.jar中有几个jar文件,在这种情况下它是否包含spring .jar? – mallikgm 2016-06-27 12:53:35

3

总之:部署到存储库管理。它可以在本地,在公司LAN上。

的思考这类问题,特别是如果它经常发生的完全不同的方式,是使用一个仓库管理器。这里有一些很棒的开源选项,比如Artifactory,Nexus或者Archiva。

让我们假设你有一个来自可疑来源的jar文件,需要将它包含在你的构建中,直到你有机会重构它。仓库管理器将允许您将文件上传到自己的仓库作为,在这个例子的目的,可疑来源的-UNKNOWN.jar

那么你的build.gradle会是这个样子:

repositories { 
    mavenRepo urls: "http://your.own.repository/url"; 
} 

dependencies { 
    compile "dubious:origin:UNKNOWN"; 
} 

有很多其他的优点是能够使用一个仓库管理,例如远程伪影的缓存,删除SCM伪影,分期的版本中,更精细的用户权限,等等。

消极的一面,你会加入其中带有一定的维护开销,让您建立运行的服务器。

取决于大小,如果你的项目,我想。

10

一个更全面的答案是由亚当·默多克在邮件列表上给出的http://gradle.1045684.n5.nabble.com/Gradle-Make-a-3rd-party-jar-available-to-local-gradle-repository-td1431953.html

随着2010年4月有没有简单的方法来一个新的jar文件添加到您的〜/ .gradle库。目前正在研究这是否已经改变。

截至2014年10月,情况仍然如此 - 因为gradle会对您的jar文件执行md5校验和,您不能简单地将其下载到.gradle/caches下的目录中,并且gradle不会,据我所知,有任何让你获取本地文件并将该文件推送到其缓存的任务。

7

使用选项(1)使用gradle-1.3从Adam Murdoch发布(已经链接上面:http://gradle.1045684.n5.nabble.com/Gradle-Make-a-3rd-party-jar-available-to-local-gradle-repository-td1431953.html),它的工作原理非常好!

这里他的评论:

  1. 复制的罐子到本地目录,并使用flatDir()库使用它们离开那里。例如,您可以将它们复制到 $ PROJECTDIR/lib和在生成文件中做到:

库{ flatDir(迪尔斯: 'LIB')}

在lib目录中的文件必须遵循命名方案: name-version-classifier.extension,其中版本和分类是 可选。因此,举例来说,你可以打电话给他们Groovy的1.7.0.jar甚至 groovy.jar

然后,你只需要声明的依赖关系为正常:

依赖{ 编译“常规:常规:1.7。 0' }

有在更详细一点一个flatDir()存储库: http://gradle.org/0.9-preview-1/docs/userguide/dependency_management.html#sec:flat_dir_resolver

  • 与上述类似,但使用的常春藤分解器代替flatDir()。这与上述非常相似,但是就名称和位置而言,允许更多的选项。
  • 有一些细节在: http://gradle.org/0.9-preview-1/docs/userguide/dependency_management.html#sub:more_about_ivy_resolvers

  • 不要声明依赖性打扰。只需将jar文件复制到某个本地目录并添加一个文件依赖项即可。例如,如果 罐子是在$ PROJECTDIR/lib中:
  • 依赖性{ 编译文件树( 'LIB')//这包括所有在 'LIB' 在编译类路径中的文件}

    在更多细节: http://gradle.org/0.9-preview-1/docs/userguide/dependency_management.html#N12EAD

  • 使用Maven安装到依赖安装到你的本地Maven缓存,并使用Maven缓存作为一个仓库:
  • 库{ mavenRepo(网址:新文件(System.properties [ '的user.home'], '的.m2 /存储库')toURI()的toURL()。)}

    相关问题