将jar和源jar从Gradle发布到Artifactory

将jar和源jar从Gradle发布到Artifactory,gradle,artifactory,Gradle,Artifactory,这是我的build.gradle: buildscript { repositories { maven { url 'http://localhost:8081/artifactory/plugins-release' credentials { username = "admin" password = "password" }

这是我的
build.gradle

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

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

version="0.0.2"
group = "mylib"

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

dependencies {
    compile 'commons-validator:commons-validator:1.4.0'
    testCompile 'junit:junit:4.11'
}

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

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

task sourcesJar(type: Jar, dependsOn: classes) {
    classifier = 'sources'
    from sourceSets.main.allSource
}

artifacts {
    archives sourcesJar
}

task dist(type: Zip, dependsOn: build) {
    classifier = 'buildreport'

    from('build/test-results') {
        include '*.xml'
        into 'tests'
    }

    from('build/reports/codenarc') {
        into 'reports'
    }

    from('build/docs') {
        into 'api'
    }

    from(sourcesJar) {
        into 'source'
    }

    from('build/libs') {
        exclude '*-sources.jar'
        into 'bin'
    }
}
基于此当前设置:

  • 要构建我的JAR,我必须运行
    gradle clean build groovydoc sourcesJar dist
    ,然后
  • 要发布到Artifactory,我必须运行第二个命令
    gradleartifactorypublish
我希望在这里改变两件事:

  • gradle-artifactoryPublish
    只将我构建的JAR和动态创建的POM发布到Artifactory。我希望它也发布我的构建所创建的源JAR怎么做?;及
  • 理想情况下,我希望能够通过调用
    gradlepublish
    来完成上述所有操作,而不必按顺序运行这两个命令这可能吗?如果是,怎么做?

  • 在发布源代码时,您需要按以下方式修改脚本:

    publishing {
        publications {
            mavenJava(MavenPublication) {
                from components.java
                artifact (sourcesJar) { 
                    classifier = 'sources'
                }
            }
        }
    }
    
    当涉及到单个命令时,您需要做的是定义任务之间的依赖关系。不幸的是,我无法尝试该脚本,因此它可能是多余的,但应该执行以下操作:

    artifactoryPublish.dependsOn('clean', 'build', 'groovydoc', 'sourcesJar', 'dist')
    publish.dependsOn(artifactoryPublish)
    

    请查看我的答案,并让我知道它是否有效。出于某种奇怪的原因,将“clean”作为依赖项添加到
    artifactoryPublish
    会导致所有内容都生成,然后清理,然后尝试发布。。。这显然是失败的,因为现在已经没有什么可以发布了。我如何才能强制“清除”发生在其他事情之前?一个解决方案(尽管我不知道它是否是最好的)是使用以下方法:
    compileJava.dependsOn('clean')
    artifactoryPublish
    可能在内部定义了依赖项。明天将进行检查。找不到
    artifactoryPublish
    任务的源代码,因此我无法调查依赖关系。你还想让我做什么?我想获得赏金:)
    sourcesJar
    ,不需要先定义任务吗?