2016-02-01 17 views
8

Sto usando shadowJar nel mio progetto java. Vorrei spingere l'esito in artefatto.Come scrivere su Gradle per pubblicare shadowjar in Artifactory

mio Gradle aspetto script come questo, io non sono sicuro di come collegare i puntini:

shadowJar { 
    baseName = 'com.mycompany.myapp' 
    manifest { 
     attributes 'Main-Class': 'myapp.starter' 
    } 
} 


    ] 
    apply plugin: 'java' 
    apply plugin: 'idea' 
    apply plugin: 'maven' 
    apply plugin: 'com.github.johnrengelman.shadow' 


    // rep for the project 
    repositories { 
     mavenCentral() 
     maven { 
      url 'http://repo.company:8081/artifactory/libs-release' 
      credentials { 
       username = "${repo_user}" 
       password = "${repo_password}" 
      } 
     } 
     maven { 
      url 'http://repo.company:8081/artifactory/libs-snapshot' 
      credentials { 
       username = "${repo_user}" 
       password = "${repo_password}" 
      } 
     } 

} 


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

      artifact sourceJar { 
       classifier "sources" 
      } 
     } 
    } 
} 

Come faccio codice Gradle di prendere il file shadowjar?

grazie, raggio.

+0

vuoi pubblicare il vaso ombra, oltre a vaso normale? O sostituirlo? – RaGe

+0

pubblica il vaso ombra in artefatto, questo è tutto. – rayman

risposta

6

La sezione publication determina ciò che si sta pubblicando usando il plugin maven-publish.

Nella configurazione attuale, from components.java pubblicherà il file jar predefinito del progetto e artefatto sourceJar pubblica il file sourceJar. Per pubblicare un diverso jar, è necessario modificare (o aggiungere una nuova) pubblicazione.

shadowJar { 
    baseName = 'myproject-shadow' 
    classifier = '' 
} 

publishing { 
    publications { 
    shadow(MavenPublication) { 
     from components.shadow 
     artifactId = 'myproject-shadow' 
    } 
    } 
} 

La versione utilizzata nel nome del jar proviene da project.version.

+0

ma il problema è che ho bisogno di cambiare il nome della versione da RELEASE a snapshop altrimenti ottengo 409. jenkins lo sta eseguendo e non voglio modificare manualmente lo script gradle.build ogni volta che passo dallo snapshop al rilascio. qualche idea su come renderlo dinamico? es: artefacts = ["com.company.app-1.0-RELEASE-all.jar", sourceJar] – rayman

+0

Questa è una domanda completamente diversa no? La denominazione degli artefatti scelta dinamicamente dovrebbe avvenire nel tuo task shadowJar. La pubblicazione riprende qualsiasi oggetto chiamato jar, l'attività shadowJar prodotta. Quale plugin stai usando per creare shadowJar? – RaGe

+0

aggiornando comunque la mia risposta. – RaGe

2

Hai guardato il Artifactory Gradle Plugin? Questo può aiutarti con ciò di cui hai bisogno, risolvendo e distribuendo artefatti da e verso Artifactory.

È possibile pubblicare utilizzando il plug-in omettendo il plug-in "artifactory" da un progetto che non pubblica nulla. Si noti che questo non si applica al progetto root che contiene l'oggetto convention e, quindi, richiede l'applicazione del plug-in. Attivare manualmente l'attività ArtifactoryPublish Gradle corrispondente per ciascun progetto a cui si desidera applicare il plug-in. Per esempio nel nostro progetto di esempio Gradle è possibile eseguire: api ./gradlew pulita: artifactoryPublish condiviso: artifactoryPublish

+0

Non capisco come pubblicare la pubblicazione .. Ho appena gestito le istantanee – rayman

+0

Nello stesso modo in cui pubblichi le tue istantanee assicurati di riferire la pubblicazione al repository Release. Nel caso in cui tenterai di pubblicare la release sul repository di istantanee, probabilmente riceverai l'errore 409. – Ariel

+0

sì ma come indirizzare la tua pubblicazione al repository Release? – rayman

1

Ecco quello che ho fatto per ottenere Gradle di pubblicare al nostro repo Nexus utilizzando il plugin ombra e il plugin Maven-pubblicare: (gestito pubblicare compito: "Gradle pubblicare")

plugins { 
    id 'com.github.johnrengelman.shadow' version '1.2.4' 
} 

apply plugin: 'maven-publish' 

publishing { 
    publications { 
     shadow(MavenPublication) { 
      from components.shadow 
      groupId 'myGroupId' 
      artifactId 'myArtifactId' 
     } 
    } 
    repositories { 
     maven { 
      url "http://nexus.mycompany.com/repository/stuff" 
      credentials { 
       username = "${System.env.NEXUS_USERNAME}" 
       password = "${System.env.NEXUS_PASSWORD}" 
      } 
     } 
    } 
} 
1

L'API è cambiato nel plugin shadow, questo funziona per me con com.github.jengelman.gradle.plugins:shadow:2.0.1: http://imperceptiblethoughts.com/shadow/#publishing_shadow_jars

5. Publishing Shadow JARs 
5.1. Publishing with Maven-Publish Plugin 
The Shadow plugin will automatically configure the necessary tasks 
in the presence of Gradle’s maven-publish plugin. The plugin provides 
the component method from the shadow extension to configure the 
publication with the necessary artifact and dependencies in the 
POM file. 

Publishing a Shadow JAR with the Maven-Publish Plugin 
apply plugin: 'java' 
apply plugin: 'maven-publish' 
apply plugin: 'com.github.johnrengelman.shadow' 

publishing { 
    publications { 
    shadow(MavenPublication) { publication -> 
     project.shadow.component(publication) 
    } 
    } 
    repositories { 
    maven { 
     url "http://repo.myorg.com" 
    } 
    } 
}