Завантажте артефакт в 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 не надсилає нічого, крім інформації про збірку.

Будь-яка допомога буде дуже вдячна.

Редагувати:

Як згадував Я.Барух, я додав

apply plugin: 'maven-publish'

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

та розділ за замовчуванням до артефакторного завдання

defaults {
   publications ('mavenJava')
}

Зараз це працює.

Дякую


2
Дякуємо за дуже корисне запитання та оновлення. Одна примітка, яка мені допомогла: defaultsнасправді йде всередину artifactory.publish, а не лише в кореневому artifactoryзавданні.
Райан Уоллс,

3
Я підсумував це у своєму блозі: buransky.com/scala/…
Радо Буранський

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 .. Будь-яке рішення ??
вівторок,

доки 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" офіційних документів.


5
Привіт JBrauch Дякую за вашу відповідь. Я додав відсутні частини до публікації, щоб допомогти іншим мати таку ж проблему.
tuncaysenturk

7
Сподіваюсь, хтось із артифакторії завітає ... тому що maven-publishв документації немає згадок про це. Дякуємо за допомогу @JBaruch! jfrog.com/confluence/display/RTF/…
Райан Уоллс,

Ви можете вважати мене "кимось із artfactory" :) Ось пояснення в офіційній документації. Додаючи його до відповіді.
JBaruch

5
@JBaruch досі не згадує жодна з двох посилань maven-publish. Я згоден з @Ryan, що це було б корисно. Але дякую за відповідь тут
фільм Генріха

Поточні приклади документів використовують плагін Android Studio gradle v0.9, який повністю застарів та застарів, останній - v1.5.0. Звичайно, приклади не працюють з цією версією: /
Rémy DAVID

8

У мене це працює. Я насправді використовував вже створений jar, тому використовую код нижче, щоб вказати свою jar, яку потрібно завантажити:

publishing {
    publications {
        mavenJava(MavenPublication) {
            // from components.java
            artifact file("path/jar-1.0.0.jar")
        }
    }
}

7

Вам потрібні плагіни:

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

для побудови проекту та отримання банок з артефакторії:

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

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
        }
    }
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.