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.