首页 文章

解决Gradle中Artifactory的传递依赖性

提问于
浏览
2

我的项目有两个模块, liblib-api ,具有以下职责

  • lib-api - 仅包含接口文件的纯java模块

  • lib - 一个安卓库

我希望jenkins将两个模块(作为jar)发布到内部artifactory服务器,以便其他项目可以使用 .

使用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
        }
    }
}

LIB /的build.gradle

apply plugin: 'com.android.library'
apply plugin: 'com.github.dcendents.android-maven'

android { ... }

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

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

Jenkins Artifactory插件配置

  • Gradle-Artifactory Integration

  • 将工件发布到Artifactory

  • 发布Maven描述符

  • 使用Maven兼容模式

  • 调用Gradle脚本

  • 使用Gradle Wrapper

  • 任务: clean assemble -x preDexDebug -x preDexDAT -x preDexRelease

Artifactory repo中的结果

+-- 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 解析为最新的带时间戳的快照,这似乎可以通过它设法解析 lib 来确定,无论我是指定 latest.integration 还是 1.0.0-SNAPSHOT

如何让gradle从artifactory中解决这个传递快照依赖?或者获取artifactory插件以gradle可以解决它的方式发布jar?

Working theory

我注意到 lib-api 文件夹没有_或者pom文件 . 我怀疑这可能是个问题 .

Artifactory的Jenkins插件使用了gradle artifactory插件,用于启用了Gradle-Artifactory集成的作业 . 根据gradle artifactory plugin docs,插件ID会根据您使用的是新的(maven-publish)还是旧的(maven)发布机制而改变 .

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

1 回答

  • 2

    tl;dr 切换到旧的maven插件以进行gradle修复 .

    我的 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 . 这可能是我之前配置的根本问题,但我没有回去测试它 .

相关问题