目前,我正在测试 Gradle 作为 Maven 的替代品。在我的项目中,有一些 3rd 方 jars,它们在任何(Maven)存储库中都不可用。我现在的问题是,我该如何管理将这些 jar 安装到我的本地 .gradle 存储库中。(如果可能的话,我不想使用本地 Maven 存储库,因为 Gradle 应该独立运行。)目前,由于缺少 jars,我得到了很多异常。在 Maven 中,运行 install 命令非常简单。但是,我在 Google 上搜索类似于 Maven 安装命令的内容并不成功。有人有想法吗?
6 回答
您可以将文件系统 JAR 依赖项包括为:
dependencies {
runtime files('libs/a.jar', 'libs/b.jar')
runtime fileTree(dir: 'libs', include: '*.jar')
}
您可以更改 compile/testCompile/etc 的运行时。
Adam Murdoch 在http://gradle.1045684.n5.nabble.com/Gradle-Make-a-3rd-party-jar-available-to-local-gradle-repository-的邮件列表中给出了更全面的答案td1431953.html
截至 2010 年 4 月,没有简单的方法可以将新的 jarfile 添加到 ~/.gradle 存储库。目前正在研究这是否已经改变。
截至 2014 年 10 月,情况仍然如此——因为 gradle 会对您的 jarfile 进行 md5 校验和,所以您不能简单地下载它并将其放入 .gradle/caches 下的目录中,而 gradle 则不会,至于我可以说,有任何任务可以让您获取本地文件并将该文件推送到其缓存。
使用亚当默多克帖子中的选项(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
- 与上面类似,但使用 ivy 解析器而不是 flatDir()。这与上述几乎相同,但在命名和位置方面允许更多选择。
有一些细节: http://gradle.org/0.9-preview-1/docs/userguide/dependency_management.html#sub: more_about_ivy_resolvers
- 不要为声明依赖而烦恼。只需将 jar 复制到某个地方的本地目录并添加文件依赖项即可。例如,如果 jar 在 $projectDir/lib 中:
dependencies { compile 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()) }
简而言之:部署到存储库管理器。它可以在本地,在公司局域网上。
考虑这种类型的问题的一种完全不同的方式,特别是如果它经常发生,是使用存储库管理器。有一些很棒的开源选项,例如 Artifactory、Nexus 或 Archiva。
让我们假设您有一个来自某个可疑来源的 jar 文件,需要将其包含在您的构建中,直到您有机会对其进行重构。存储库管理器将允许您将文件上传到自己的存储库,在本示例中,dubious-origin-UNKNOWN.jar
然后你的 build.gradle 看起来像这样:
repositories {
mavenRepo urls: "http://your.own.repository/url";
}
dependencies {
compile "dubious:origin:UNKNOWN";
}
使用存储库管理器还有许多其他优点,例如缓存远程工件、从 scm 中删除工件、暂存版本、更细化的用户权限等等。
不利的一面是,您将添加一个服务器,该服务器会带来一些维护开销以保持构建运行。
我想,这取决于你的项目的大小。
也许我在阅读您的问题时遗漏了一些东西,假设您的 gradle repo 是 flatDir 类型,您应该能够以 myjar-1.0.jar 的形式复制文件并将它们解析为版本 1.0 的 myjar。
不知道为什么 Gradle 必须运行 maven 才能访问本地 maven 存储库。您可以只定义 Maven 存储库,它应该解决依赖关系。如果需要,您可以使用gradle upload
本地或远程 maven repos 推送 jars。在这种情况下,它将执行 maven。
我认为这样的事情应该有效:
dependencies {
files('yourfile.jar')
}
对你起作用吗?