可以使用maven而不使用gradle通过artifactory解决依赖关系吗?
我在使用gradle通过artifactory解决依赖关系时遇到问题。但我可以使用maven解决这种依赖性,所以我不确定我做错了什么 maven构建文件是:可以使用maven而不使用gradle通过artifactory解决依赖关系吗?,maven,gradle,artifactory,Maven,Gradle,Artifactory,我在使用gradle通过artifactory解决依赖关系时遇到问题。但我可以使用maven解决这种依赖性,所以我不确定我做错了什么 maven构建文件是: <dependencies> <dependency> <groupId>org.geoserver</groupId> <artifactId>geoserver</artifactId> <version>2.5.1</
<dependencies>
<dependency>
<groupId>org.geoserver</groupId>
<artifactId>geoserver</artifactId>
<version>2.5.1</version>
<type>war</type>
</dependency>
</dependencies>
<repositories>
<repository>
<name>libs-releases</name>
<url>http://<artifactory-host>/artifactory/libs-releases</url>
</repository>
</repositories>
我已经清理了本地存储库和缓存,以确保解决依赖关系。如果打开调试输出,我可以看到POM文件有HTTP请求,但WAR文件没有HTTP请求
[DEBUG] [org.apache.http.impl.conn.DefaultClientConnection] Sending request: HEAD /artifactory/libs-releases/org/geoserver/geoserver/2.5.1/geoserver-2.5.1.pom HTTP/1.1
[DEBUG] [org.apache.http.impl.conn.DefaultClientConnection] Receiving response: HTTP/1.1 200 OK
我可以直接下载POM和WAR文件,因此不存在工件、代理问题或身份验证问题:
$ wget http://<artifactory-host>/artifactory/libs-releases/org/geoserver/geoserver/2.5.1/geoserver-2.5.1.pom
`geoserver-2.5.1.pom' saved [32283/32283]
$ wget http://<artifactory-host>/artifactory/libs-releases/org/geoserver/geoserver/2.5.1/geoserver-2.5.1.war
`geoserver-2.5.1.war' saved [60164745/60164745]
查看geoserver 2.5.1源代码:
org.geoserver:geoserverwar具有父org.geoserver:webpom
org.geoserver:WebPOM有父org.geoserver:geoserver-WAR
因此存在循环依赖关系,org.geoserver:web的父级具有非POM包
但是maven继续下载WAR文件,尽管出现了“致命”错误:
Downloaded: http://<artifactory-host>/artifactory/libs-releases/org/geoserver/geoserver/2.5.1/geoserver-2.5.1.war (58755 KB at 8601.2 KB/sec)
但是当我运行$gradle依赖项时,依赖项仍然没有解决
使用此依赖项运行任务时出现堆栈溢出错误:
$ mvn dependency:resolve
Downloading: http://<artifactory-host>/artifactory/libs-releases/org/geoserver/geoserver/2.5.1/geoserver-2.5.1.pom
Downloading: http://<artifactory-host>/artifactory/libs-releases/org/geoserver/web/2.5.1/web-2.5.1.pom
Downloading: http://<artifactory-host>/artifactory/libs-releases/org/geoserver/geoserver/2.5.1/geoserver-2.5.1.war
[INFO] The following files have been resolved:
[INFO] org.geoserver:geoserver:war:2.5.1:compile
$ gradle dependencies
:dependencies
compile - Compile classpath for source set 'main'.
\--- org.geoserver:geoserver:2.5.1 FAILED
$ gradle bundleArtifacts
:bundleArtifacts
FAILURE: Build failed with an exception.
* What went wrong:
Could not resolve all dependencies for configuration ':compile'.
> Could not resolve org.geoserver:geoserver:2.5.1.
Required by:
<my-project>:1.0-SNAPSHOT
> Could not resolve org.geoserver:geoserver:2.5.1.
> Could not parse POM http://<artifactory-host>/artifactory/libs-releases/org/geoserver/geoserver/2.5.1/geoserver-2.5.1.pom
> Could not resolve org.geoserver:web:2.5.1.
> Could not parse POM http://<artifactory-host>/artifactory/libs-releases/org/geoserver/web/2.5.1/web-2.5.1.pom
> Could not resolve org.geoserver:geoserver:2.5.1.
...
这表明GADLE不考虑传递依赖关系,因为它不能解析POM文件,因为循环依赖性。
我认为这里唯一的解决方案是创建一个单独的工件,比如一个包含org.geoserver:geoserver:2.5.1 WAR工件的ZIP文件,在该ZIP文件上添加一个依赖项,并创建一个任务,将该ZIP文件的内容提取到目标目录。看起来您正在使用导致此问题的修改过的pom文件。 原始模块的包类型为pom,没有父模块。这是整个geoserver项目的父pom,不应用作依赖项。 也是pom类型,并作为所有web相关模块的父模块。 查看,我找不到任何名为geoserver-x.x.x.war的工件。似乎有人部署了geoserver的war分发版,并修改了org.geoserver:geoserver的原始pom文件,以便能够解决此问题。
如果您想继续解决这场战争,我建议为其创建一个新的专用.pom文件,该文件将不会与使用新的groupId/artifactId的geoserver文件冲突。声明您不能将战争添加为编译依赖项。谢谢。。。我将编译更改为运行时,但仍然无法解决。。。查看我的编辑。我真的应该说不能将war添加为依赖项编译或运行时-至少我链接到的问题是这样说的。我在不同的war工件上添加了编译依赖项查看我的编辑,并成功解决了这一问题。我认为问题在于gradle在处理POM错误时没有maven那么宽容。是的,看起来org.geoserver:geoserver在本地artifactory上的POM文件与github上的不同。一些秘密正在进行中,我需要修复它。看起来有人试图将org.geoserver:web修改为org.geoserver:geoserver。有趣的是,maven允许这样做,而gradle拒绝了它,尽管存在循环依赖项的POM解析需要一些修复。
Downloaded: http://<artifactory-host>/artifactory/libs-releases/org/geoserver/geoserver/2.5.1/geoserver-2.5.1.war (58755 KB at 8601.2 KB/sec)
dependencies {
compile('org.geoserver:geoserver:2.5.1@war') {
transitive = false
}
...
$ gradle bundleArtifacts
:bundleArtifacts
FAILURE: Build failed with an exception.
* What went wrong:
Could not resolve all dependencies for configuration ':compile'.
> Could not resolve org.geoserver:geoserver:2.5.1.
Required by:
<my-project>:1.0-SNAPSHOT
> Could not resolve org.geoserver:geoserver:2.5.1.
> Could not parse POM http://<artifactory-host>/artifactory/libs-releases/org/geoserver/geoserver/2.5.1/geoserver-2.5.1.pom
> Could not resolve org.geoserver:web:2.5.1.
> Could not parse POM http://<artifactory-host>/artifactory/libs-releases/org/geoserver/web/2.5.1/web-2.5.1.pom
> Could not resolve org.geoserver:geoserver:2.5.1.
...