当前位置: 首页 > 知识库问答 >
问题:

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

吕向荣
2023-03-14

我有一个问题,通过使用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>

我可以确认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 dependencies
:dependencies

compile - Compile classpath for source set 'main'.
\--- org.geoserver:geoserver:2.5.1 FAILED
[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
$ 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]  

编辑#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 @ 

查看GeoServer2.5.1源代码:

  • org.geoserver:geoserver(WAR)具有父级org.geoserver:web(POM)
  • org.geoserver:Web(POM)具有父org.geoserver:geoserver(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我更改了依赖项,以排除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.
...

共有1个答案

漆雕疏珂
2023-03-14

看起来您使用的是导致此问题的修改过的pom文件。
原始org.geoserver:geoserver模块的包类型是pom,它没有父包。这是整个geoserver项目的父pom,不应用作依赖项。
org.geoserver:web也属于pom类型,并充当所有web相关模块的父模块。
查看geoserver Artifactory服务器,我找不到任何名为GeoServer-X.X.X.WAR的构件。似乎有人部署了geoserver的web archive(war)分发版,并修改了org.geoserver:geoserver的原始pom文件,以便解决该问题。

如果您想继续解决这个问题,我建议为它创建一个新的专用.pom文件,该文件不会与geoserver冲突(使用新的groupID/artifactid)。

 类似资料:
  • 我有两个gradle项目。A和B。A依赖于B。我还将B作为一组工件上传到artifactory本地服务器。我用了maven publish。然后我试着用B作为A中的依赖项。我试着用它作为maven依赖项,所以我写道 但是,它总是尝试从repo1下载JAR。我想我误解了什么。首先,我不太明白为什么我需要maven,我也不明白我的工件发布是否等于maven安装。如何使用B作为A的依赖项?我的看法是:在

  • 我想下载使用ivy的工件:解决,但使用使用[conf]属性的模式。所以我在IvyS中定义了以下内容ettings.xml 注意这个模式 现在可以很好地解决依赖关系,但只为配置创建了一个文件夹:默认。没有为ConfGroup1创建文件夹 另外,我知道这可以通过使用ivy:retrieve实现,但我不想使用它,因为它将涉及将工件从ivy缓存复制到ivy:resolve之后的另一个地方,我有价值数十亿字

  • 我对ivy没有解析我的一些依赖关系有问题。以下是我如何重现这个问题的: 我在eclipse中有一个空的java项目。我已经在我的项目中添加了ivy.xml: 这工作正常,ivy能够解决和下载口水。 如果我将修订版更改为6.3.0.Final(http://mvnrepository.com/artifact/org.drools/drools-core/6.3.0.Final),它将不起作用,我看

  • 谁能告诉我Maven中的依赖项Hamcrest有什么问题吗?这是一个遗憾,但我不能在这里附上截图。 当我试图更新Maven索引时,什么也没有发生。

  • 我试图修改我们现有的CDI扩展,它创建自己的代理bean。现在只有一个为每个服务创建的代理。服务有类似于应用程序范围的东西,所以服务总是只有一个实例。 我想要完成的是为每个注入点创建一个代理bean。我需要它们来存储特定于给定注射点的一些信息。如果同一个服务有更多的注入点,那么将有更多的代理bean,但它们后面仍然有一个服务实例。但是,当我以这种方式更改行为时,Weld会抱怨不明确的依赖关系,因为

  • 当我尝试运行mvn sonar时:sonar target maven无法运行sonar,以下是mvn输出的相关部分: org.apache.maven.shared.dependency.tree.依赖 似乎出于某种原因,maven没有下载所需的依赖项。 我配置了一个包含jar的本地nexus,但是不管我的设置中是否有激活的配置文件,我都会得到相同的结果。xml与否。 我应该如何配置maven,