【问题标题】:How to build Groovy JAR w/ Gradle and publish it to in-house repo如何使用 Gradle 构建 Groovy JAR 并将其发布到内部仓库
【发布时间】:2014-08-12 07:07:42
【问题描述】:

我有一个 Groovy 项目,正在尝试使用 Gradle 构建它。首先,我想要一个 package 任务,它通过针对其依赖项编译它来创建一个 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'
}

但是我不相信我已经使用我的jar 任务正确设置了版本控制(例如,我如何才能让它创建myapp-1.2.1myapp-1.2.2?我也不认为我有我的@987654327 @ 配置设置正确:pom.withXml 中应该包含什么?

【问题讨论】:

    标签: groovy jar gradle artifactory


    【解决方案1】:

    非常欢迎您为此使用 artifactory 插件。 该文档可以在 our user guide 中找到,您可以在下面找到 gradle build 的完整工作示例。

    运行 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'
            }
        }
    }
    

    【讨论】:

    • 谢谢@JBaruch,我一定会试一试的!好奇:我将如何使用此构建脚本打包(JAR)并发布 JAR?我假设gradle jargradle publish?再次感谢!
    【解决方案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 插件),而不是要编译/运行的代码的依赖关系。)

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

    【讨论】:

    • 感谢@Peter Niederwieser - 请查看我的编辑。您的意见非常有帮助,我按照您的建议将其与gradle-all 中的代码示例拼凑在一起。但是,我确实有一些后续问题:(1) 在运行 gradle jar 时如何实现版本控制?对于发布,我应该在 pom.withXml 中添加什么?
    • 您设置了version 属性。无需使用pom.withXml,除非您想向 POM 添加其他(和可选)信息。
    猜你喜欢
    • 2020-04-20
    • 2015-01-25
    • 2011-12-25
    • 1970-01-01
    • 1970-01-01
    • 2014-10-03
    • 2013-10-18
    • 1970-01-01
    • 2021-03-18
    相关资源
    最近更新 更多