Gradle:使第三方jar可用于本地gradle存储库

目前,我正在testingGradle作为Maven的替代scheme。 在我的项目中,有一些第三方的jar子,在任何(Maven)仓库中都没有。 我的问题是现在,我怎么能pipe理它安装到我的本地.gradle存储库这些jar子。 (如果可能的话,我不想使用本地的Maven仓库,因为Gradle应该独立运行。)目前,由于缺lessjar子,我得到了很多exception。 在Maven中,通过运行install命令非常简单。 但是,我的谷歌search类似于Maven的安装命令是不成功的。 有没有人有一个想法?

您可以将文件系统JAR依赖项包含为:

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

您可以更改编译/testing编译/等运行时。

亚当·默多克(Adam Murdoch)在邮件列表上给出了一个更全面的答案, url是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不会我可以告诉,有什么任务让你拿一个本地文件,并推送该文件到其caching。

使用的选项(1)出自Adam Murdoch的post(已经链接上面: http : //gradle.1045684.n5.nabble.com/Gradle-Make-a-3rd-party-jar-available-to-local-gradle-repository -td1431953.html )和gradle-1.3,它工作的很好!

这里他的评论:

  1. 将jar复制到本地目录,并使用flatDir()存储库将它们用在那里。 例如,您可以将它们复制到$ projectDir / lib中,并在您的构build文件中执行:

存储库{flatDir(dirs:'lib')}

lib目录中的文件必须遵循命名scheme:name-version-classifier.extension,其中version和classifier是可选的。 所以,举例来说,你可能会称它们为groovy-1.7.0.jar,甚至是groovy.jar

然后,你只需声明这些依赖关系是正常的:

依赖关系{编译'groovy:groovy:1.7.0'}

flatDir()存储库中有一些更详细的信息: http ://gradle.org/0.9-preview-1/docs/userguide/dependency_management.html#sec:flat_dir_resolver

  1. 类似于上面,但使用常春藤parsing器而不是flatDir()。 这和上面几乎一样,但是就命名和位置而言,允许更多的选项。

有一些细节: http : //gradle.org/0.9-preview-1/docs/userguide/dependency_management.html#sub : more_about_ivy_resolvers

  1. 不要打扰声明依赖关系。 只需将jar文件复制到某个本地目录并添加一个文件依赖项即可。 例如,如果jar子在$ projectDir / lib中:

依赖关系{编译fileTree('lib')//这包括编译类path中'lib'下的所有文件}

更多详情,请访问: http : //gradle.org/0.9-preview-1/docs/userguide/dependency_management.html#N12EAD

  1. 使用maven install将相关性安装到本地mavencaching中,并使用mavencaching作为存储库:

(mavenRepo(urls:new File(System.properties ['user.home'],'.m2 / repository').toURI()。toURL())}

假设你的gradle repo是flatDirtypes的,你应该能够以myjar-1.0.jar的forms复制这些文件并将它们parsing为1.0版本的myjar。

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

简而言之:部署到资源库pipe理器。 它可以在本地,在公司局域网上。

对这类问题的一种完全不同的思考方式,特别是如果经常发生的话,就是使用存储库pipe理器。 有一些伟大的开源选项,如Artifactory,Nexus或Archiva。

让我们假设你有一个来自可疑来源的jar文件,需要包含在你的构build中,直到你有机会重构它。 资源库pipe理器允许你将file upload到你自己的资料库,为了这个例子,dubious-origin-UNKNOWN.jar

然后你的build.gradle看起来像这样:

 repositories { mavenRepo urls: "http://your.own.repository/url"; } dependencies { compile "dubious:origin:UNKNOWN"; } 

使用资源库pipe理器还有很多其他优点,例如远程工件的caching,从scm中移除工件,暂存版本,更细化的用户权限等等。

不利的一面是,你会添加一个服务器来承担一些维护开销,以保持你的构build运行。

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

我认为这样的事情应该工作:

 dependencies { files('yourfile.jar') } 

对你起作用吗?