目前,我正在测试Gradle作为Maven的替代品。在我的项目中,有一些第三方罐子,在任何(Maven)存储库中都不可用。我现在的问题是,如何管理它以将这些jar安装到我的本地.gradle存储库中。 (如果可能,我不想使用本地Maven存储库,因为Gradle应该独立运行。)目前,由于缺少jar,我得到了很多例外。在Maven中,运行install命令非常简单。但是,我在Google上搜索类似于Maven安装命令的内容并不成功。有人有想法吗?
答案 0 :(得分:38)
您可以将文件系统JAR依赖项包括在内:
dependencies {
runtime files('libs/a.jar', 'libs/b.jar')
runtime fileTree(dir: 'libs', include: '*.jar')
}
你可以改变compile / testCompile / etc的运行时间。
答案 1 :(得分:10)
Adam Murdoch在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不会,据我所知,任何可以让你获取本地文件并将该文件推送到缓存的任务。
答案 2 :(得分:8)
在Adam Murdoch帖子中使用选项(1)(上面已经链接: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并在你的构建文件中执行:
醇>知识库{ flatDir(dirs:'lib')}
lib目录中的文件必须遵循命名方案: name-version-classifier.extension,其中包含版本和分类器 可选的。所以,例如你可以称它们为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
- 与上述类似,但使用常春藤解析器而不是flatDir()。这几乎与上面相同,但允许一个 就命名和位置而言,还有更多选择。
醇>
- 不要为声明依赖项而烦恼。只需将jar复制到某个地方的本地目录并添加文件依赖项。例如, 如果罐子在$ projectDir / lib:
醇>依赖{ 编译fileTree('lib')//这包括编译类路径中'lib'下的所有文件}
更多详情: http://gradle.org/0.9-preview-1/docs/userguide/dependency_management.html#N12EAD
- 使用maven install将依赖项安装到本地maven缓存中,并使用maven缓存作为存储库:
醇>知识库{ mavenRepo(urls:new File(System.properties ['user.home'],'。m2 / repository')。toURI()。toURL())}
答案 3 :(得分:3)
也许我在阅读你的问题时遗漏了一些东西,假设你的gradle repo是flatDir类型,你应该能够以myjar-1.0.jar的形式复制那里的文件,并将它们解析为myjar of version 1.0。
不确定为什么Gradle需要运行maven才能访问本地maven存储库。您可以只定义maven repos,它应该解决依赖关系。如果需要,您可以使用gradle upload
推送罐子本地或远程maven repos。在这种情况下,它将执行maven。
答案 4 :(得分:3)
简而言之:部署到存储库管理器。它可以在公司局域网上本地。
对这类问题的一种完全不同的思考方式,特别是如果它经常发生,就是使用存储库管理器。有一些很棒的开源选项,如Artifactory,Nexus或Archiva。
让我们假设你有一个来自某些可疑来源的jar文件需要包含在你的构建中,直到你有机会重构它。存储库管理器允许您将文件上载到您自己的存储库,因为为了这个例子,dubious-origin-UNKNOWN.jar
然后你的build.gradle看起来像这样:
repositories {
mavenRepo urls: "http://your.own.repository/url";
}
dependencies {
compile "dubious:origin:UNKNOWN";
}
使用存储库管理器还有很多其他优点,例如缓存远程工件,从scm中删除工件,登台版本,更细粒度的用户权限等等。
另一方面,您将添加一个服务器,该服务器带有一些维护开销,以保持您的构建运行。
我想,如果您的项目的大小,则取决于。
答案 5 :(得分:1)
我认为这样的事情应该有效:
dependencies {
files('yourfile.jar')
}
它对你有用吗?