44

目前,我正在测试 Gradle 作为 Maven 的替代品。在我的项目中,有一些 3rd 方 jars,它们在任何(Maven)存储库中都不可用。我现在的问题是,我该如何管理将这些 jar 安装到我的本地 .gradle 存储库中。(如果可能的话,我不想使用本地 Maven 存储库,因为 Gradle 应该独立运行。)目前,由于缺少 jars,我得到了很多异常。在 Maven 中,运行 install 命令非常简单。但是,我在 Google 上搜索类似于 Maven 安装命令的内容并不成功。有人有想法吗?

4

6 回答 6

39

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

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

您可以更改 compile/testCompile/etc 的运行时。

于 2010-10-18T18:34:57.940 回答
10

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 则不会,至于我可以说,有任何任务可以让您获取本地文件并将该文件推送到其缓存。

于 2011-11-30T02:21:57.150 回答
8

使用亚当默多克帖子中的选项(1)(上面已经链接: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 并在您的构建文件中执行以下操作:

存储库 { 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

  1. 与上面类似,但使用 ivy 解析器而不是 flatDir()。这与上述几乎相同,但在命名和位置方面允许更多选择。

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

  1. 不要为声明依赖而烦恼。只需将 jar 复制到某个地方的本地目录并添加文件依赖项即可。例如,如果 jar 在 $projectDir/lib 中:

dependencies { compile fileTree('lib') // 这包括编译类路径中 'lib' 下的所有文件 }

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

  1. 使用 maven install 将依赖项安装到本地 maven 缓存中,并使用 maven 缓存作为存储库:

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

于 2012-11-23T15:29:23.070 回答
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 中删除工件、暂存版本、更细化的用户权限等等。

不利的一面是,您将添加一个服务器,该服务器会带来一些维护开销以保持构建运行。

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

于 2011-06-01T23:14:10.060 回答
3

也许我在阅读您的问题时遗漏了一些东西,假设您的 gradle repo 是 flatDir 类型,您应该能够以 myjar-1.0.jar 的形式复制文件并将它们解析为版本 1.0 的 myjar。

不知道为什么 Gradle 必须运行 maven 才能访问本地 maven 存储库。您可以只定义 Maven 存储库,它应该解决依赖关系。如果需要,您可以使用gradle upload本地或远程 maven repos 推送 jars。在这种情况下,它将执行 maven。

于 2010-04-05T21:27:53.710 回答
1

我认为这样的事情应该有效:

dependencies {
  files('yourfile.jar')
}

对你起作用吗?

于 2010-05-12T12:55:55.040 回答