如何使用Gradle构建Groovy JAR并将其发布到内部存储库

Ven*_*kat 6 groovy jar artifactory gradle

我有一个Groovy项目,我正在尝试使用Gradle构建它.首先,我想要一个package通过根据其依赖项编译JAR来创建JAR 的任务.然后我需要为该JAR生成Maven POM并将JAR/POM发布到内部Artifactory仓库.的build.gradle:

apply plugin: "groovy"
apply plugin: "maven-publish"

repositories {
    maven {
        name "artifactory01"
        url "http://myartifactory/artifactory/libs-release"
    }
}
dependencies {
    compile "long list starts here"
}

// Should compile up myapp-<version>.jar
jar {
}

// Should publish myapp-<version>.jar and its (generated) POM to our in-house Maven/Artifactory repo.
publishing {
    publications {
        myPublication(MavenPublication) {
            from components.java
            artifact sourceJar {
                classifier "source"
            }

            pom.withXml {
                // ???
            }
        }
    }
}

task wrapper(type: Wrapper) {
    gradleVersion = '1.11'
}
Run Code Online (Sandbox Code Playgroud)

不过,我不认为我已经建立了我的正确版本jar的任务(例如,我怎么能拿它创造myapp-1.2.1主场迎战myapp-1.2.2?我也并不认为我有我的publications配置设置是否正确:在又该何去何从pom.withXml

JBa*_*uch 12

非常欢迎您使用artifactory插件.该文档可以在我们的用户指南中找到,您可以在下面找到一个完整的gradle构建示例.

运行gradle build artifactoryPublish以构建和发布项目.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath(group: 'org.jfrog.buildinfo', name: 'build-info-extractor-gradle', version: '3.0.1')
    }
}
apply plugin: 'java'
apply plugin: 'maven-publish'
apply plugin: 'com.jfrog.artifactory'

group = 'com.jfrog.example'
version = '1.2-SNAPSHOT'
status = 'SNAPSHOT'

dependencies {
    compile 'org.slf4j:slf4j-api:1.7.5'
    testCompile 'junit:junit:4.11'
}

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

publishing {
    publications {
        main(MavenPublication) {
            from components.java
            artifact sourcesJar
    }
}

artifactory {
    contextUrl = 'http://myartifactory/artifactory'
    resolve {
        repository {
            repoKey = 'libs-release'
        }
    }
    publish {
        repository {
            repoKey = 'libs-snapshot-local'
            username = 'whatever'
            password = 'whatever123'
        }
        defaults {
            publications 'main'
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Pet*_*ser 2

package是 Java/Groovy 中的关键字,您必须使用不同的语法来声明具有该名称的任务。

package无论如何,应该删除 的任务声明,因为该jar任务已经达到了这个目的。任务jar配置 ( jar { from ... }) 应该位于最外层(不嵌套在另一个任务中),但这from configurations.compile不太可能是您想要的,因为这会将编译依赖项的 Jar 包含到 Jar 中(常规 Java 类加载器无法处理),而不是将它们合并到 Jar 中。(你确定你需要一个胖罐子吗?)

同样,publish任务声明应该被删除,并替换为publishing { publications { ... } }.

此外,该buildscript块可能应该被删除,并repositories { ... }移动dependencies { ... }到最外层。(buildscript { dependencies { ... } }声明构建脚本本身的依赖项(例如 Gradle 插件),而不是要编译/运行的代码的依赖项。)

samples我建议查看完整 Gradle 发行版目录中的许多独立示例构建( gradle-all)。