Cargar artefactos en Artifactory usando Gradle

84

Soy un novato en Gradle y Artifactory y quiero subir un archivo JAR a Artifactory.

Aquí está mi build.gradlearchivo:

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
}

Después de ejecutar la artifactoryPublishtarea, la compilación se realiza correctamente como se muestra a continuación:

> 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

Sin embargo, no se envía nada a Artifactory excepto la información de compilación.

Cualquier ayuda será muy apreciada.

Editar:

Como mencionó JBaruch, agregué

apply plugin: 'maven-publish'

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

y la sección predeterminada para la tarea de artefactos

defaults {
   publications ('mavenJava')
}

Ahora funciona.

Gracias

tuncaysenturk
fuente
2
Gracias por la pregunta y la actualización muy útiles. Una nota que me ayudó: en defaultsrealidad va hacia adentro artifactory.publish, no solo en la artifactorytarea raíz .
Ryan Walls
3
He resumido esto en un blog: buransky.com/scala/…
Rado Buransky
1
cuando lo intento, obtengo: Error:(x, 0) Could not find property 'java' on SoftwareComponentInternal set.¿Podrías publicar el guión completo?
Nimrod Dayan
Estoy escribiendo el código anterior para cargar un jar que he colocado en mi carpeta gradle (gradle / sample.jar), ejecuto y veo que solo se carga la información de compilación. Tengo 2 dudas. En primer lugar, ¿dónde estamos especificando qué jar subir? No hemos especificado la ruta en ninguna parte. En segundo lugar, si escribo la sección predeterminada en artifaction.publish, aparece el error Error: (82, 0) La extensión del tipo 'PublishingExtension' no existe. Tipos de extensión registrados actualmente: [DefaultExtraPropertiesExtension, DefaultArtifactPublicationSet_Decorated .. ¿Alguna solución?
sver
siempre y cuando tengamos apply plugin: 'maven'el archivo pom se genera y si tenemos 'apply plugin: 'maven-publish'el archivo jar se publica. Y no tenía por qué haberlo hecho publishing.publications.mavenJava(MavenPublication) { from components.java }. default {publications ('mavenJava'); publishConfigs('archives', 'published') }
Como sea

Respuestas:

55

Eso es porque no tienes ninguno publications. El artifactory-publishcomplemento funciona con maven-publishcomplementos y cargas publications.

Si prefiere trabajar con el antiguo complemento de Maven , necesita un artifactorycomplemento , no artifactory-publish.

Eche un vistazo a la parte de Descripción general en la página "Trabajar con Gradle" de los documentos oficiales.

JBaruch
fuente
5
Hola JBrauch Gracias por tu respuesta. Agregué las partes que faltan a la publicación para ayudar a otros a tener el mismo problema.
tuncaysenturk
7
Espero que venga alguien de artifactory ... porque no hay ninguna mención maven-publishen la documentación. ¡Gracias por la ayuda @JBaruch! jfrog.com/confluence/display/RTF/…
Ryan Walls
Puedes considerarme "alguien de artfactory" :) Aquí está la explicación en la documentación oficial. Agregándolo a la respuesta.
JBaruch
5
@JBaruch todavía ninguna de las dos páginas enlazadas menciona maven-publish. Estoy de acuerdo con @Ryan en que sería útil. Pero gracias por la respuesta aquí
Heinrich Filter
Los ejemplos de documentos actuales usan el complemento gradle de Android Studio v0.9, que está completamente desactualizado y en desuso, el último es v1.5.0. Por supuesto, los ejemplos no funcionan con esta versión: /
Rémy DAVID
8

Conseguí que esto funcione. En realidad, estaba usando un jar ya creado, así que estoy usando el siguiente código para especificar mi jar que se va a cargar:

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

Necesitas complementos:

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

para construir proyectos y recuperar frascos de artefactos:

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()
}

Configuraciones de artefactos:

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

        }
    }
}

y para publicar:

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

gradle.properties

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

Entonces todo es simple. Si desea cargar su jar:

gradle artifactoryPublish
grep
fuente
4

Esto es lo que funcionó para mí con el 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
        }
    }
}
gary69
fuente