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,它工作的很好!
这里他的评论:
- 将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
- 类似于上面,但使用常春藤parsing器而不是flatDir()。 这和上面几乎一样,但是就命名和位置而言,允许更多的选项。
有一些细节: http : //gradle.org/0.9-preview-1/docs/userguide/dependency_management.html#sub : more_about_ivy_resolvers
- 不要打扰声明依赖关系。 只需将jar文件复制到某个本地目录并添加一个文件依赖项即可。 例如,如果jar子在$ projectDir / lib中:
依赖关系{编译fileTree('lib')//这包括编译类path中'lib'下的所有文件}
更多详情,请访问: http : //gradle.org/0.9-preview-1/docs/userguide/dependency_management.html#N12EAD
- 使用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') }
对你起作用吗?
- android-sdks / build-tools / 17.0.0 / aapt:加载共享库时出错:libz.so.1:无法打开共享目标文件:没有这样的文件或目录
- 如何findWindows的安装时间和date?
- 获取错误,错误:npm安装后找不到模块“express”
- 为什么Python中的“pip install”会引发一个SyntaxError?
- 错误:服务无效
- 如何在Ubuntu 12.10中使用c ++安装Eclipse?
- 为什么Macports需要永久构build简单的包?
- 当我尝试更新我的应用程序时失败
- XCode:7应用程序安装失败:找不到此可执行文件的有效设置configuration文件