Publier un instantané vs publier une publication dans Gradle avec intégration continue

je suis juste en train d'apprendre Gradle, venant à la fois D'une Ant+Ivy et Maven background et j'essaye d'enrouler ma tête autour de la bonne façon de publier une version de mon logiciel en utilisant gradle. J'ai également besoin d'intégrer constamment mes projets sans avoir à libérer constamment des artéfacts indépendants.

Ant + Ivy

dans le monde Ant + Ivy, je peux créer publisnapshot et publirelease cibles. Ceux-ci peuvent chaque utilisez différents résolveurs Ivy pour résoudre et publier à mon snapshot séparé ou des dépôts de libération dans Nexus.

Maven

avec Maven, je peux définir un snapshotRepository ou repository dans ma section distributionManagement pour avoir maven publier à mon snapshot séparé ou libérer des dépôts dans Nexus.

Gradle

entre maintenant gradle. Comment puis-je parvenir à ce même la fonctionnalité? J'utilise des dépôts de style ivy.

Merci pour tout ce que vous pouvez nous fournir.

RÉPONSE

grâce à la réponse de René ci-dessous, j'ai finalement pu créer une solution réalisable. Le nœud du problème était que je devais constamment l'intégrer dans tous mes projets. Pour ce faire, j'ai pensé que déclarer une dépendance en utilisant le numéro de version latest.integration était le seul moyen d'y arriver. la dernière version de mes bibliothèques, et donc j'ai eu besoin d'utiliser des dépôts de style ivy.

en fait, il y a d'autres moyens de tirer dans la dernière version des bibliothèques afin d'intégrer en permanence mon logiciel à travers tous les projets. La solution est d'utiliser le uploadArchives exactement comme René a énuméré ci-dessous (notez aussi que vous aurez besoin de apply plugin: 'maven' pour que cela fonctionne. Assurez-vous que vos dépôts sont aussi de style maven, et lorsque vous déclarez une dépendance, vous pouvez utiliser dynamic numéros de version comme indiqué ici . Dans mon cas, j'ai listé un numéro de version global dans mon common.gradle et en aval des projets, j'ai utilisé version: version pour faire référence à la version globale de la variable. De cette façon, chaque artefact dans mon système a la même version. Quand il est temps de libérer, je peux changer cela de 1.0-SNAPSHOT à 1.0 et construire chacun dans l'ordre.

28
demandé sur Community 2013-05-25 17:51:37

2 réponses

vous pouvez configurer le snapshot et le release dépôt dans la tâche "Upload" (par exemple le uploadArchives ) tâche:

uploadArchives {  
    repositories {  
        mavenDeployer {  
            repository(url: 'http://myCompanyRepo.com:8081/releases') {  
                authentication(userName: 'admin', password: 'password');  
            }  
            snapshotRepository(url: 'http://myCompanyRepo.com:8081/snapshots') {
                authentication(userName: 'admin', password: 'password');  
            }  
        }  
    }  
}

Pour *-SNAPSHOT versions snapshotRepository est utilisé. Sinon, le libère repo est utilisé.

46
répondu Rene Groeschke 2014-02-24 10:02:56

si vous souhaitez utiliser le nouveau plugin maven-publish , vous pouvez télécharger vers différents dépôts en utilisant un if déclaration:

apply plugin: 'maven-publish'

...

publishing {
    publications {
        mavenJava(MavenPublication) {
            from components.java
        }
    }
    repositories {
        maven {
            credentials {
                username "anonymous"
            }

            if(project.version.endsWith('-SNAPSHOT')) {
                url "http://example/artifactory/libs-snapshot-local"
            } else {
                url "http://example/artifactory/libs-release-local"
            }
        }
    }
}

la Référence: maven-de publier et de réglage snapshotRepository et releaseRepository

40
répondu Paolo Fulgoni 2014-02-24 10:04:11