Carica artefatto su Artifactory usando Gradle


84

Sono un principiante di Gradle e Artifactory e desidero caricare un file JAR su Artifactory.

Ecco il mio build.gradlefile:

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
}

Dopo aver eseguito l' artifactoryPublishattività, la compilazione ha esito positivo come mostrato di seguito:

> 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

Tuttavia, non viene inviato nulla ad Artifactory tranne le informazioni sulla build.

Qualsiasi aiuto sarà molto apprezzato.

Modificare:

Come ha detto JBaruch, ho aggiunto

apply plugin: 'maven-publish'

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

e la sezione predefinita per l'attività artificiale

defaults {
   publications ('mavenJava')
}

Ora funziona.

Grazie


2
Grazie per la domanda e l'aggiornamento molto utili. Una nota che mi ha aiutato: defaultsva effettivamente dentro artifactory.publish, non solo nell'attività di root artifactory.
— Ryan Walls

3
L'ho riassunto in un blog: buransky.com/scala/…
— Rado Buransky

1
quando lo provo ottengo: Error:(x, 0) Could not find property 'java' on SoftwareComponentInternal set.Potresti pubblicare lo script completo?
— Nimrod Dayan

Sto scrivendo il codice sopra per caricare un jar che ho inserito nella mia cartella gradle (gradle / sample.jar), eseguo e vedo che vengono caricate solo le informazioni di build. Ho 2 dubbi. In primo luogo, dove stiamo specificando quale jar caricare, non abbiamo specificato il percorso da nessuna parte. In secondo luogo, se scrivo la sezione predefinita in artifaction.publish, ottengo l'errore Errore: (82, 0) L'estensione di tipo "PublishingExtension" non esiste. Tipi di estensione attualmente registrati: [DefaultExtraPropertiesExtension, DefaultArtifactPublicationSet_Decorated .. Any solution ??
— sver

finché abbiamo apply plugin: 'maven'il file pom viene generato e se abbiamo 'apply plugin: 'maven-publish'il file jar viene pubblicato. E non dovevo averlo publishing.publications.mavenJava(MavenPublication) { from components.java }. Comunque devi avere default {publications ('mavenJava'); publishConfigs('archives', 'published') }
— ravikanth

Risposte:


55

Questo perché non ne hai publications. Il artifactory-publishplug-in funziona con maven-publishplug-in e caricamenti publications.

Se preferisci lavorare con il vecchio plugin Maven , hai bisogno del artifactoryplugin , no artifactory-publish.

Dai un'occhiata alla parte Panoramica nella pagina "Lavorare con Gradle" dei documenti ufficiali.


5
Ciao JBrauch Grazie per la tua risposta. Ho aggiunto le parti mancanti al post per aiutare gli altri ad avere lo stesso problema.
— tuncaysenturk

7
Spero che arrivi qualcuno di artifactory ... perché non c'è alcuna menzione maven-publishnella documentazione. Grazie per l'aiuto @JBaruch! jfrog.com/confluence/display/RTF/…
— Ryan Walls

Puoi considerarmi "qualcuno di artfactory" :) Ecco la spiegazione nella documentazione ufficiale. Aggiungendolo alla risposta.
— JBaruch

5
@JBaruch ancora nessuna delle due pagine collegate menziona maven-publish. Sono d'accordo con @ Ryan sul fatto che sarebbe utile. Ma grazie per la risposta qui
— Filtro Heinrich

Gli esempi di documenti correnti utilizzano il plug-in gradle di Android Studio v0.9 che è completamente obsoleto e deprecato, l'ultimo è v1.5.0. Ovviamente, gli esempi non funzionano con questa versione: /
— Rémy DAVID

8

Ho funzionato. In realtà stavo usando un jar già creato, quindi sto usando il codice seguente per specificare il mio jar che deve essere caricato:

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

7

Hai bisogno di plugin:

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

per costruire il progetto e recuperare i vasi da 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()
}

Configurazioni artificiali:

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

        }
    }
}

e per la pubblicazione:

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

gradle.properties

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

Quindi è tutto semplice. Se vuoi caricare il tuo jar:

gradle artifactoryPublish

4

Questo è ciò che ha funzionato per me con il comando 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
        }
    }
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.