可以使用maven而不使用gradle通过artifactory解决依赖关系吗?

可以使用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</

我在使用gradle通过artifactory解决依赖关系时遇到问题。但我可以使用maven解决这种依赖性,所以我不确定我做错了什么

maven构建文件是:

<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.
...