Вопрос: Как построить Groovy JAR w / Gradle и опубликовать его на внутреннем репо


У меня есть проект Groovy, и я пытаюсь его построить с Gradle. Сначала я хочу package задача, которая создает JAR, компилируя ее в зависимости от ее зависимостей. Затем мне нужно создать Maven POM для этого JAR и опубликовать 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?


6


источник


Ответы:


Вы более чем можете использовать artifactory плагин для этого. Документацию можно найти в наше руководство пользователя  и ниже вы можете найти полный рабочий пример построения градиента.

Бег 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'
        }
    }
}

12



package это ключевое слово в Java / Groovy, и вам придется использовать другой синтаксис для объявления задачи с этим именем.

В любом случае, декларация задачи для package должны быть удалены, поскольку jar задача уже служит этой цели. jar конфигурация задачи ( jar { from ... }) должен находиться на самом внешнем уровне (не вложенном в другую задачу), но from configurations.compile маловероятно, что вы хотите, поскольку в него войдут Jars из компиляционных зависимостей в Jar (с которыми обычные загрузчики классов Java не могут справиться), а не слияние их с Jar. (Вы даже уверены, что вам нужна толстая банка?)

Аналогичным образом, publish декларация задачи должна быть удалена и заменена на publishing { publications { ... } },

Так же buildscript блок должен быть удален, и repositories { ... } а также dependencies { ... } переместился на самый внешний уровень. ( buildscript { dependencies { ... } } объявляет зависимости самого скрипта сборки (например, плагины Gradle), а не зависимости от кода, который должен быть скомпилирован / запущен.)

Я предлагаю проверить многие самодостаточные примеры сборки в samples каталог полного распределения Gradle ( gradle-all).


2