gpt4 book ai didi

java - Gradle 不会解析依赖关系(Maven 会)

转载 作者:行者123 更新时间:2023-12-02 08:27:23 40 4
gpt4 key购买 nike

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

compile group: 'org.restlet.jse', name: 'org.restlet.ext.apispark', version: '2.3.1'

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

maven {
url "http://maven.restlet.org"
}

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

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-null。

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

Link to working pom.xml that has same dependency

如何解决这个问题?此时我对更多手动解决方案也很感兴趣:)谢谢。

最佳答案

诊断

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

  • 唯一快照:每次部署快照时,都会用时间戳buildNumber进行标记,这些时间戳和buildNumber被写入在 maven-metadata.xml 文件中,它们被附加到其名称中,最终结果如下:artifactName-version-timestamp-buildNumber.jar
  • 非唯一快照:每次部署快照时,它都会覆盖以前的版本,其名称最终如下:artifactName-version.jar

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

问题是“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,您可以清楚地看到 timestampbuildNumber 标记中的 null:

<metadata>
[...]
<versioning>
<snapshot>
<timestamp>null</timestamp>
<buildNumber>null</buildNumber>
</snapshot>
<lastUpdated>null</lastUpdated>
</versioning>
</metadata>

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

解决方案1 ​​- flatDir

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

repositories {
[...]
flatDir {
dirs 'lib'
}
[...]
}

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

解决方案 2 - jcenter 存储库

Suggested by Opal

添加 jcenter repository,其中包含缺少的依赖项并且 Gradle 可以很好地处理。

Gradle 1.7 开始,您可以简单地定义它:

repositories {
[...]
jcenter()
[...]
}

关于java - Gradle 不会解析依赖关系(Maven 会),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29557622/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com