我在通过使用gradle的工件来解决依赖时遇到了问题。但是我可以使用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>我可以确认maven将解决依赖关系:
$ 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构建脚本是:
repositories {
mavenCentral()
maven { url 'http://<artifactory-host>/artifactory/libs-releases' }
}
dependencies {
compile 'org.geoserver:geoserver:2.5.1@war'
}但是gradle不会解决依赖关系:
$ gradle dependencies
:dependencies
compile - Compile classpath for source set 'main'.
\--- org.geoserver:geoserver:2.5.1 FAILED我清理了本地存储库和缓存,以确保解决依赖关系。如果打开调试输出,我可以看到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] 我看不出我在这里做错了什么。可能是很简单的事?
编辑#1 --我在工件中添加了JAR文件的依赖项,这解决了没有错误的问题。然后,我在工件中添加了对另一个WAR文件的依赖,该文件也没有错误地解决。但出于某种原因,原始的geoserver WAR依赖在使用maven时解决,而在使用gradle时解决。
编辑#2我在使用maven构建时看到以下警告:
[WARNING] The POM for org.geoserver:geoserver:war:2.5.1 is invalid, transitive dependencies (if any) will not be available: 2 problems were encountered while building the effective model for org.geoserver:geoserver:2.5.1
[ERROR] Invalid packaging for parent POM org.geoserver:geoserver:2.5.1, must be "pom" but is "war" @
[FATAL] The parents form a cycle: org.geoserver:geoserver:2.5.1 -> org.geoserver:web:2.5.1 -> org.geoserver:geoserver:2.5.1 @ 查看geoserver 2.5.1原始代码:
org.geoserver:geoserver (WAR)有父org.geoserver:web (POM)org.geoserver:web (POM)有父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对这个问题更严格?
编辑#3 i更改了依赖项以排除org.geoserver:geoserver上的传递依赖关系
dependencies {
compile('org.geoserver:geoserver:2.5.1@war') {
transitive = false
}
...但是,当我运行$ gradle dependencies时,这个依赖仍然没有解决。
当我使用此依赖项运行任务时,会出现堆栈溢出错误:
$ 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.
...这表明gradle没有考虑传递依赖,因为它不能解析POM文件,因为循环依赖。
我认为这里唯一的解决方案是创建一个包含org.geoserver:geoserver:2.5.1 WAR工件的单独工件(例如ZIP文件),添加对该ZIP文件的依赖,并创建一个将该ZIP文件的内容提取到目标目录的任务。
发布于 2016-01-11 11:53:39
看起来您使用的是修改后的pom文件,这导致了这个问题。
原始org.geoserver:geoserver模块的包类型是pom,它没有父级。这是整个geoserver项目的父pom,不应用作依赖项。
org.geoserver:web也是pom类型,并充当所有web相关模块的父级。
查看geoserver Artifactory服务器,我找不到任何名为geoserver-x.x.x.war的工件。似乎有人部署了geoserver的web档案 (war)发行版,并修改了org.geoserver:geoserver的原始pom文件,以便对其进行解析。
如果您想继续解决这场战争,我建议为它创建一个新的专用.pom文件,它不会与geoserver冲突(使用一个新的groupId/artifactId)。
https://stackoverflow.com/questions/34713179
复制相似问题