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


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.


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

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

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
        }
    }
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.