簡體   English   中英

如何使用Gradle構建Groovy JAR並將其發布到內部存儲庫

[英]How to build Groovy JAR w/ Gradle and publish it to in-house repo

我有一個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.1而不是myapp-1.2.2呢?我也不認為我有我的publications配置集正確地說: pom.withXml應該pom.withXml哪些pom.withXml

非常歡迎您使用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'
        }
    }
}

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目錄中的許多自包含示例構建。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM