Gradle 在多模块项目中将渐变ear发布到artifactory

Gradle 在多模块项目中将渐变ear发布到artifactory,gradle,jenkins-pipeline,artifactory,Gradle,Jenkins Pipeline,Artifactory,我有一个像这样的身材 /** * Gradle plugins. */ plugins { id "org.sonarqube" version "3.0" id "com.avast.gradle.docker-compose" version "0.13.0" id "jacoco" } /** * import extensions for dependenc

我有一个像这样的身材

/**
 * Gradle plugins.
 */
plugins {
    id "org.sonarqube" version "3.0"
    id "com.avast.gradle.docker-compose" version "0.13.0"
    id "jacoco"
}

/**
 * import extensions for dependencies.
 */
apply from: 'dependencies.gradle'

/**
 * Root project variables.
 */
ext {
    localDevelopment = System.env.ENVIRONMENT != null ? System.env.ENVIRONMENT == 'LOCAL' : false
    javaInfo = "${System.properties['java.version']}"
    buildNumber = System.properties['buildNumber'] != null ? "${System.properties['buildNumber']}" : LocalDateTime.now()
}

/**
 * Apply to all projects (includes root).
 */
allprojects {
    apply plugin: 'maven-publish'
    apply plugin: 'java-library'

    group = 'com.gradle.test'
    version = 'test-21.14.7.pipeline.version'
    description = 'Test application'

    sourceCompatibility = JavaVersion.VERSION_1_8
    targetCompatibility = JavaVersion.VERSION_1_8

    repositories {
        mavenLocal()
        maven { url 'https://artifactory2.company.co.nz/company-maven' }
        maven { url 'https://artifactory2.company.co.nz/company-maven-plugin' }
        maven { url 'https://repo.maven.apache.org/maven2' }
    }

    tasks.withType(Javadoc) {
        options.addStringOption('Xdoclint:none', '-quiet')
    }

    /**
     * Apply manifest entries for all jars.
     */
    jar {
        manifest {
            attributes (
                "Created-By": "Gradle ${gradle.gradleVersion}",
                "Built-By": System.properties['user.name'],
                "Build-Jdk": javaInfo,
                "Implementation-Title": project.name,
                "Implementation-Version": rootProject.version,
                "Implementation-Vendor-Id": rootProject.group,
                "Implementation-Vendor": rootProject.ext.vendor,
                "Specification-Version": rootProject.version,
            )
        }
    }

    /**
     * Fail the build if a library has a version conflict. Substitute with version defined in 'forcedLibs'.
     */
    configurations {
        all {
            resolutionStrategy {
                failOnVersionConflict()
                force forcedLibs
            }
        }
    }

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

/**
 * Apply to sub-projects (excludes root).
 */
subprojects {
    tasks.withType(JavaCompile) {
        options.encoding = 'UTF-8'
    }

    /**
     * Custom task to build dependency report for all sub-projects from root.
     */
    task allDeps(type: DependencyReportTask) {}

    /**
     * Custom task to build dependency insight report for all sub-projects from root.
     */
    task allDepInsight(type: DependencyInsightReportTask) {}
}

/**
 * Docker Compose plugin settings.
 */
dockerCompose {
    useComposeFiles = ["${ rootProject.buildDir }/docker-compose.yml"]
    projectName = rootProject.name
}

/**
 * Copy Docker files from ./docker to Docker run directory.
 */
task copyDocker(type: Copy) {
    from "${ rootProject.projectDir }/docker"
    into dir.dockerRunDir
}

/**
 * Link 'copyDocker' as dependent on 'copyEar'.
 */
copyDocker.dependsOn ':test-ear:copyEar'

/**
 * Link 'composeUp' as dependent on 'copyDocker'.
 */
composeUp.dependsOn copyDocker

/**
 * Sonarqube plugin settings.
 */
sonarqube {
    properties {
        property "sonar.host.url", "http://sonarqube.company.co.nz:9000"
        property "sonar.coverage.exclusions", "com/ibm/**/*, **/*.hbm.xml, **/*.sql, " +
                "**/*.IFD, **/*.mfd, **/*.xpr, **/*.cob, **/com/company/nzlo/messaging/**/*, " +
                "**/com/company/nzlo/si/**/*, **/*.JPG, **/*.jpg, **/*.ifd, **/*.bmp, **/*.mdf, **/*.xml"
        property "sonar.test.exclusions", "**/test/*"
        property "sonar.scm.disabled", "true"
        property "sonar.dynamicAnalysis", "reuseReports"
    }
}

/**
 *  Task to configure jacoco and gather code coverage from subprojects. This is applied conditionally
 *  as not all subprojects will use the jacoco plugin ('test-ear').
 *  Reference: [Gradle example](https://docs.gradle.org/6.4-rc-1/samples/sample_jvm_multi_project_with_code_coverage.html)
 */
task codeCoverageReport(type: JacocoReport) {
    dependsOn(subprojects.test)
    /**
     * Configure source sets and execution data for sub project's tests.
     */
    subprojects { s ->
        s.plugins.withType(JacocoPlugin).configureEach {
            s.tasks.matching({ t -> t.extensions.findByType(JacocoTaskExtension) })
                .configureEach { testTask ->
                    sourceSets s.sourceSets.main
                    executionData(testTask)
            }
        }
        /**
         * Configure plugin for subprojects.
         */
        s.tasks.withType(JacocoPluginExtension).configureEach {
            toolVersion = "0.8.5"
            reportsDir = file("${buildDir}/reports")
        }
    }

    reports {
        xml.enabled true
        html.enabled true
    }
}

/**
 * Link 'sonarqube' as dependent on 'codeCoverageReport'.
 */
tasks['sonarqube'].dependsOn codeCoverageReport

/**
 * Defines wrapper version and distribution url.
 */
wrapper {
    gradleVersion = '6.5'
    distributionUrl "https://artifactory2.company.co.nz/gradle-dist-remote-cache/gradle-${gradleVersion}-bin.zip"
}
正在运行
/gradlew build
/gradlew publish
,但工件不会被发布

我看到:

> Task :publish UP-TO-DATE
> Task :lending-ear:publish UP-TO-DATE
> Task :lending-framework:publish UP-TO-DATE
> Task :lending-pd:publish UP-TO-DATE
> Task :lending-si:publish UP-TO-DATE
> Task :lending-ui:publish UP-TO-DATE
我猜这是本地发布(到本地存储库)而不是artifactory,我在Jenkins的脚本管道中运行它,如何将它推送到artifactory?我想将所有子模块推送到artifactory中。

您有两个选项:

选项1:使用脚本化管道渐变作业。这种方法是推荐的,也是最简单的方法

基本示例:

def rtGradle = Artifactory.newGradleBuild()
rtGradle.deployer repo: 'libs-release-local', server: server
rtGradle.resolver repo: 'jcenter', server: server
rtGradle.run tasks: 'artifactoryPublish'
请参阅相关文档和完整示例

选项2:使用Gradle Artifactory插件


请参阅相关文档和完整示例。

我想这让我更接近了,但后来我开始从gradle看到更奇怪的东西,并切换回maven。不过,谢谢你的选择