首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gradle不会解决依赖(Maven将解决)

Gradle不会解决依赖(Maven将解决)
EN

Stack Overflow用户
提问于 2015-04-10 09:14:30
回答 2查看 2.8K关注 0票数 2

我的项目通过gradle配置了依赖项。我想添加以下依赖项:

代码语言:javascript
复制
compile group: 'org.restlet.jse', name: 'org.restlet.ext.apispark', version: '2.3.1'

它可以在以下存储库中找到(我已将其添加到我的build.gradle中):

代码语言:javascript
复制
maven {
    url "http://maven.restlet.org"
}

但是,当我这样做时,我会得到以下错误:

代码语言:javascript
复制
Could not find org.restlet.jse:org.restlet.lib.swagger-models:1.5.0-SNAPSHOT.
http://maven.restlet.org/org/restlet/jse/org.restlet.lib.swagger-models/1.5.0-SNAPSHOT/maven-metadata.xml
http://maven.restlet.org/org/restlet/jse/org.restlet.lib.swagger-models/1.5.0-SNAPSHOT/org.restlet.lib.swagger-models-1.5.0-null-null.pom
http://maven.restlet.org/org/restlet/jse/org.restlet.lib.swagger-models/1.5.0-SNAPSHOT/org.restlet.lib.swagger-models-1.5.0-null-null.jar
Required by: org.restlet.jse:org.restlet.ext.apispark:2.3.1

我可以看到,jar实际上在存储库中,但是Gradle没有在正确的位置寻找它,原因我不知道。为什么它没有在文件名中使用版本,而是使用1.5.0-NULL。

我已经创建了一个Maven项目,它具有在pom.xml中定义的相同的依赖项,该依赖项可以工作。

链接到具有相同依赖项的工作pom.xml

如何解决这个问题呢?在这一点上,我对更多的手动解决方案也很感兴趣:)谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-10 13:09:03

诊断

它似乎与快照“唯一性”有关。有关Maven存储库的信息,可以部署快照工件“唯一”或“非唯一”。

  • 唯一快照:每次部署快照时,都会使用时间戳和 buildNumber 标记快照,这些时间戳和buildNumber都写在maven-metadata.xml文件中,并被附加到它的名称中,最后显示为:artifactName-version-timestamp-buildNumber.jar
  • 非唯一快照:每次部署快照时都会覆盖上一个版本,他的名字最后是:artifactName-version.jar

建议使用唯一的快照,因为如果需要,可以精确地引用工件的一个版本。

问题是"http://maven.restlet.org“似乎使用了非唯一的快照,而遗憾的是,gradle似乎有问题来处理非唯一快照:https://issues.gradle.org/browse/GRADLE-3164

如果您查看http://maven.restlet.com/org/restlet/jse/org.restlet.lib.org.restlet.lib.swagger-models/1.5.0-SNAPSHOT/maven-metadata.xml,您可以清楚地看到时间戳和buildNumber标记中的null

代码语言:javascript
复制
<metadata>
  [...]
  <versioning>
    <snapshot>
      <timestamp>null</timestamp>
      <buildNumber>null</buildNumber>
    </snapshot>
    <lastUpdated>null</lastUpdated>
  </versioning>
</metadata>

我认为这就是"null-null“的由来。

解决方案1- flatDir

要处理它,您可以手动下载工件,将其放在一个目录中,例如"lib“,并创建一个flatDir存储库:

代码语言:javascript
复制
repositories {
    [...]
    flatDir {
        dirs 'lib'
    }
    [...]
}

这不是一个理想的解决方案,但有效。

解决方案2- jcenter存储库

奥帕尔

添加包含缺少的依赖项并且Gradle处理得很好的jcenter存储库

由于第1.7级可以简单地用以下方法来定义它:

代码语言:javascript
复制
repositories {
    [...]
    jcenter()
    [...]
}
票数 6
EN

Stack Overflow用户

发布于 2015-04-10 13:51:06

似乎您需要其他存储库来下载所有的依赖项。也许maven能透明地处理这件事。以下脚本在运行cp任务时成功下载所有依赖项:

代码语言:javascript
复制
apply plugin: 'java'

configurations {
   lol
}

repositories {
   jcenter()
   mavenCentral()
   maven {
      url "http://maven.restlet.org"
   }
   maven {
      url "https://repository.mulesoft.org/nexus/content/repositories/public/"
   }
}

dependencies {
   lol group: 'org.restlet.jse', name: 'org.restlet.ext.apispark', version: '2.3.1'
}

task cp(type: Copy) {
   from configurations.lol
   into 'deps'
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29557622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档