Загрузите артефакт в Artifactory с помощью Gradle

84

Я новичок в Gradle и Artifactory, и я хочу загрузить файл JAR в Artifactory.

Вот мой build.gradleфайл:

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'maven'
apply plugin: 'artifactory-publish'

groupId = 'myGroup'
version = '1.0'
def artifactId = projectDir.name
def versionNumber = version

artifactory {
    contextUrl = 'http://path.to.artifactory' // base artifactory url
    publish {
        repository {
            repoKey = 'libs-releases'   // Artifactory repository key to publish to
            username = 'publisher'      // publisher user name
            password = '********'       // publisher password
            maven = true
        }
    }
}

artifactoryPublish { 
    dependsOn jar
}

После выполнения artifactoryPublishзадачи сборка будет успешной, как показано ниже:

> gradle artifactoryPublish  --stacktrace
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:jar
:artifactoryPublish
Deploying build info to: http://path.to.artifactory/api/build

BUILD SUCCESSFUL

Total time: 7.387 secs

Однако в Artifactory ничего не отправляется, кроме информации о сборке.

Любая помощь будет высоко ценится.

Редактировать:

Как упоминал JBaruch, я добавил

apply plugin: 'maven-publish'

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

и раздел по умолчанию для искусственной задачи

defaults {
   publications ('mavenJava')
}

Теперь это работает.

благодаря

Tuncaysenturk
источник
2
Спасибо за очень полезный вопрос и обновление. Одно замечание, которое мне помогло: defaultsфактически идет внутрь artifactory.publish, а не только в корневую artifactoryзадачу.
Райан Уоллс
3
Я резюмировал это в блоге: buransky.com/scala/…
Rado Buransky
1
когда я пробую это, я получаю: Error:(x, 0) Could not find property 'java' on SoftwareComponentInternal set.Не могли бы вы опубликовать полный сценарий?
Нимрод Даян
Я пишу приведенный выше код для загрузки банки, которую я поместил в свою папку gradle (gradle / sample.jar), я выполняю и вижу, что загружается только информация о сборке. У меня 2 сомнения. Во-первых, где мы указываем, какую банку загружать, мы нигде не указали путь. Во-вторых, если я напишу раздел по умолчанию в artifaction.publish, я получаю сообщение об ошибке Ошибка: (82, 0) Расширение типа PublishingExtension не существует. В настоящее время зарегистрированные типы расширений: [DefaultExtraPropertiesExtension, DefaultArtifactPublicationSet_Decorated .. Любое решение ??
sver
пока у нас есть apply plugin: 'maven'файл pom, и если у нас есть 'apply plugin: 'maven-publish'файл jar, он публикуется. И мне не нужно было publishing.publications.mavenJava(MavenPublication) { from components.java }. Однако ты должен иметь default {publications ('mavenJava'); publishConfigs('archives', 'published') }
равикант

Ответы:

55

Это потому, что у вас их нет publications. artifactory-publishПлагин работает с maven-publishплагином и загрузки publications.

Если вы предпочитаете работать со старым плагином maven , вам нужен artifactoryплагин , а не artifactory-publish.

Взгляните на обзорную часть на странице «Работа с Gradle» официальной документации.

JBaruch
источник
5
Привет, JBrauch Спасибо за ваш ответ. Я добавил недостающие части в сообщение, чтобы помочь другим решить ту же проблему.
tuncaysenturk
7
Я надеюсь, что кто-нибудь из artifactory зайдет ... потому что maven-publishв документации нет никаких упоминаний . Спасибо за помощь @JBaruch! jfrog.com/confluence/display/RTF/…
Райан Уоллс
Можете считать меня "кто-то из artfactory" :) Вот объяснение в официальной документации. Добавляем к ответу.
JBaruch
5
@JBaruch по-прежнему не упоминает ни одну из двух связанных страниц maven-publish. Я согласен с @Ryan, что это было бы полезно. Но спасибо за ответ здесь
Heinrich Filter
В текущих примерах документации используется плагин Gradle для Android Studio v0.9, который полностью устарел и не рекомендуется, последняя версия - v1.5.0. Конечно, примеры не работают с этой версией: /
Реми ДЭВИД
8

У меня это работает. На самом деле я использовал уже созданную банку, поэтому я использую приведенный ниже код, чтобы указать мою банку, которая должна быть загружена:

publishing {
    publications {
        mavenJava(MavenPublication) {
            // from components.java
            artifact file("path/jar-1.0.0.jar")
        }
    }
}
Sver
источник
7

Вам нужны плагины:

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

для создания проекта и получения jar-файлов из артефакта:

buildscript {
    repositories {
        maven {
            url 'http://[IP]:[PORT]/artifactory/gradle-dev'
            credentials {
                username = "${artifactory_user}"
                password = "${artifactory_password}"
            }
        }
        mavenCentral()
    }
    dependencies { classpath "org.jfrog.buildinfo:build-info-extractor-gradle:4.5.4" }
}

repositories {
    mavenCentral()
    mavenLocal()
}

Артифактические конфиги:

artifactory {
    contextUrl = "${artifactory_contextUrl}"
    publish {
        repository {
            repoKey = 'gradle-dev-local'
            username = "${artifactory_user}"
            password = "${artifactory_password}"
            maven = true
        }
        defaults {
            publications('mavenJava')
        }
        publishBuildInfo = true
        publishArtifacts = true
        publishPom = true
    }
    resolve {
        repository {
            repoKey = 'gradle-dev'
            username = "${artifactory_user}"
            password = "${artifactory_password}"
            maven = true

        }
    }
}

и для публикации:

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

gradle.properties

artifactory_user=publisher
artifactory_password=*****
artifactory_contextUrl=http://IP:PORT/artifactory

Так что все просто. Если вы хотите загрузить свою банку:

gradle artifactoryPublish
grep
источник
4

Это то, что у меня сработало с командой gradle clean build publish

apply plugin: 'maven-publish'
apply plugin: 'groovy'
apply plugin: 'java'
apply plugin: 'maven'

group = 'com.mine'
version = '1.0.1-SNAPSHOT'

repositories{
    mavenCentral()
}

dependencies {
    compile gradleApi()
    compile localGroovy()
    compile 'com.google.guava:guava:27.0-jre'
    testCompile 'junit:junit:4.12'
    //compile 'org.apache.commons:commons-lang3:3.8.1'
}

publishing {
    repositories {
        maven {
            url = 'https://artifactory.mine.net/artifactory/my-snapshots-maven'
            credentials {
                username 'user'
                password 'password'
            }
        }
    }
    publications{
        mavenJava(MavenPublication) {
            from components.java
        }
    }
}
gary69
источник