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

在gradle中解析Artifactory中的传递依赖

章嘉致
2023-03-14
    null

使用Jenkins Artifactory插件,我能够将这两个模块的JAR发布到Artifactory,但我的另一个依赖于lib的项目未能构建,出现以下gradle错误

找不到com.mygroup:lib-api:1.0.0-snapshot

lib-api/build.gradle

apply plugin: 'java'
apply plugin: 'maven-publish'

group = 'com.mygroup'
version = project.version

publishing {
    publications {
        api(MavenPublication) {
            from components.java
        }
    }
}
apply plugin: 'com.android.library'
apply plugin: 'com.github.dcendents.android-maven'

android { ... }

dependencies {
    compile project(':lib-api')
}

group = 'com.mygroup'
version = project.version
    null
    null
+-- libs-snapshot-local
|   +-- com
|   |   +-- mygroup
|   |   |   +-- lib
|   |   |   |   +-- 1.0.0-SNAPSHOT
|   |   |   |   |   `-- lib-1.0.0-20150508-1.jar
|   |   |   |   |   `-- lib-1.0.0-20150508-1.pom
|   |   |   |   |   `-- maven-metadata.xml
|   |   |   |   `-- maven-metadata.xml
|   |   |   +-- lib-api
|   |   |   |   +-- 1.0.0-SNAPSHOT
|   |   |   |   |   `-- lib-1.0.0-20150508-1.jar

我的理解是,ArtiFactory/Gradle应该足够聪明,能够将-snapshot解析为最新的时间戳快照,这似乎可以从以下事实中得到证明:无论我指定latest.integration还是1.0.0-snapshot,它都能够解析lib

如何让gradle从ArtiFactory解决这种传递快照依赖关系?或者让artifactory插件以gradle可以解决的方式发布jar?

工作理论

artifactory的Jenkins插件将gradle artifactory插件用于支持Gradle-Artifactory集成的工作。根据gradle artifactory插件文档,插件ID的变化取决于您使用的是新的(maven-publish)还是旧的(maven)发布机制。

这会是问题所在吗?Artifactory插件是否应用了错误的插件ID,可能是因为它基于android库模块做出了决定?

共有1个答案

孙永嘉
2023-03-14

TL;Dr切换到gradle的旧maven插件修复了它。

我的lib-api/build.gradle现在看起来如下所示

apply plugin: 'java'
apply plugin: 'maven'

group = 'com.mygroup'
version = project.version
ext.artifactId = project.name.toLowerCase()
project.archivesBaseName = project.artifactId

uploadArchives {
    repositories {
        mavenDeployer {
            pom.artifactId = project.artifactId
        }
    }
}

注意:根据Maven插件的gradle文档,如果设置了archivesBaseName,则必须显式定义pom.artifactid。这可能是我以前配置的根本问题,但我没有回去测试它。

 类似资料:
  • 问题内容: 我调查了一段时间,可能在这里看到了与aar和可传递依赖项有关的最受欢迎的答案,但是对于我来说,如何使它起作用仍然不清楚。 所以: 我有给定gradle配置的android库: 然后,我将其部署到本地Maven存储库gradle install。部署库的POM文件如下所示: 最后使用上述库作为依赖项对我的Android应用程序进行配置: 在手机上部署应用程序后,我得到了属于我的Andro

  • 我在Liferay DXP中为Google Analytics API编写了代码。我已经通过在build.gradle中编写来导入了以下jar 此外,我还使用以下代码将其包含在bnd.bnd文件中: 该模块编译良好,我能够得到JAR。但是当我在服务器上部署这个jar时,我总是得到未解决的需求:import-package:error。 我知道问题出在传递依赖上。我在Liferay社区的某个地方读到

  • 通过使用Jenkins的阿蒂工厂插件和Gradle,我能够成功地部署到我的阿蒂工厂实例。但是,我无法使用进入Jenkins配置的凭据从同一个存储库解析工件。 以下是,取自Artifactory中Artifactory的“生成构建脚本”功能。 错误: 在本地,解析工件是有效的(等都被解析了,因为我在本地中配置了它们)。但是,构建失败,因为未定义。当然,我可以配置供詹金斯使用(这是可行的),但这应该如

  • 我已经研究了一段时间,可能看到了与aar和传递依赖相关的最流行的答案,但不知何故,我仍然不清楚如何使其工作。 所以: 根据上述树,不检测所有的传递依赖。问题出在哪里,该如何正确做?