使用Gradle-Artifactory插件发布子项目

me

我有以下多项目Gradle构建:

myapp/
    myapp-client/
        build.gradle
        src/** (omitted for brevity)
    myapp-shared/
        build.gradle
        src/** (omitted for brevity)
    myapp-server
        build.gradle
        src/** (omitted for brevity)
    build.gradle
    settings.gradle

其中myapp/build.gradle的样子:

subprojects {
    apply plugin: 'groovy'
    sourceCompatibility = '1.7'
    targetCompatibility = '1.7'
    [compileJava, compileTestJava]*.options*.encoding = 'UTF-8'

    repositories {
        mavenCentral()
        maven {
            // My local/private Artifactory
            url "http://localhost:8081/artifactory/myapp-snapshots"
        }
    }

    dependencies {
        compile (
            'org.codehaus.groovy:groovy-all:2.3.7'
        )
    }
}

当前三个子项目Gradle文件中的每个文件都很简单:

dependencies {
    compile (
        'org.apache.commons:commons-lang3:3.3.2'
    )
}

这是我要实现的目标:

  • gradle clean build -Pversion=0.1.5从父myapp目录运行时,我希望所有三个子项目都使用0.1.5版本构建。因此myapp-client-0.1.5.jarmyapp-shared-0.1.5.jarmyapp-server-0.1.5.jar目前,我的构建已经做到了,但是...
  • 如果客户端和共享JAR构建成功,我也希望将它们发布到我的私人Artifactory存储库中。(我不希望发布服务器JAR)。

对于将Gradle构建的JAR发布到Artifactory而言,我能够找到和测试/确认的最紧凑的代码是:

buildscript {
    repositories {
        maven {
            url 'http://localhost:8081/artifactory/plugins-release'
            credentials {
                username = "admin"
                password = "12345"
            }
            name = "maven-main-cache"
        }
    }
    dependencies {
        classpath "org.jfrog.buildinfo:build-info-extractor-gradle:3.0.1"
    }
}

apply plugin: 'maven-publish'
apply plugin: "com.jfrog.artifactory"

repositories {
    add buildscript.repositories.getByName("maven-main-cache")
    maven {
        url "http://localhost:8081/artifactory/myapp-snapshots"
    }
}

artifactory {
    contextUrl = "http://localhost:8081/artifactory"
    publish {
        repository {
            repoKey = 'myapp-snapshots'
            username = "admin"
            password = "12345"
            maven = true
        }
        defaults {
            publications ('mavenJava')
        }
    }
}

publishing {
    publications {
        mavenJava(MavenPublication) {
            from components.java
        }
    }
}

当我在测试build.gradle项目中使用此代码段并运行时gradle artifactoryPublish,它将正确地将我的JAR发布到Artifactory。

我的问题:如何将此代码段添加到我的项目中,以便gradle clean build成功地从父目录运行时,会生成要发布到Artifactory的客户端和共享JAR?

尽管不理想,但如果不可能一次完成所有这些工作,我将愿意将出版单独进行第二步。有任何想法吗?

巴鲁

使用artifactory插件是正确的方法。您需要使用将其应用到allprojects顶级项目并在其上禁用部署artifactoryPublish.skip=true您可以在此处找到与您的项目非常相似的项目的完整示例

默认情况下build不依赖artifactoryPublish,因此您需要运行gradle build artifactoryPublish以上传jar。原因是您可能要运行大量构建,直到您决定上传某些内容。您可以通过配置建立的依赖build将取决于artifactoryPublish

build(dependsOn: 'artifactoryPublish')

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章