web-dev-qa-db-fra.com

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

J'apprends juste Gradle, venant à la fois de Ant + Ivy et de Maven et j'essaie de comprendre comment publier une version finale de mon logiciel à l'aide de gradle. J'ai également besoin d'intégrer constamment mes projets sans avoir à publier constamment des artefacts indépendants.

Ant + Ivy

Dans le monde Ant + Ivy, je peux créer des cibles publishSnapshot et publishRelease. Ceux-ci peuvent chacun utiliser différents résolveurs Ivy pour résoudre et publier sur mes référentiels d'instantanés ou de versions distincts dans Nexus.

Maven

Avec Maven, je peux définir un snapshotRepository ou repository dans ma section distributionManagement pour que maven publie sur mes référentiels d'instantanés ou de versions distincts dans Nexus.

Gradle

Entrez maintenant gradle. Comment puis-je obtenir cette même fonctionnalité? J'utilise des référentiels de style lierre.

Merci pour toutes les informations que vous pouvez fournir.

[~ # ~] répondre [~ # ~]

Grâce à la réponse de René ci-dessous, j'ai finalement pu créer une solution viable. Le nœud du problème était que je devais constamment m'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'extraire la dernière version de mes bibliothèques, et j'avais donc besoin d'utiliser des dépôts de style ivy.

En fait, il existe d'autres façons d'intégrer la dernière version des bibliothèques afin d'intégrer en permanence mon logiciel dans tous les projets. La solution consiste à utiliser le uploadArchives exactement comme René l'a indiqué ci-dessous (notez également que vous devrez apply plugin: 'maven' pour que cela fonctionne. Assurez-vous que vos référentiels sont également de style maven, et lorsque vous déclarez une dépendance, vous pouvez utiliser des numéros de version dynamiques comme indiqué ici . Dans mon cas, j'ai répertorié un numéro de version global dans mon common.gradle et dans les projets en aval, j'ai utilisé version: version pour référencer la variable de version globale. De cette façon, chaque artefact de mon système a la même version. Quand il est temps de sortir, je peux changer cela de 1.0-SNAPSHOT à 1.0 et construire chacun dans l'ordre.

33
dev

Vous pouvez configurer le référentiel snapshot et release dans la tâche 'Upload' (par exemple la tâche uploadArchives):

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 le snapshotRepository est utilisé. Sinon, le repo releases est utilisé.

50
Rene Groeschke

Si vous souhaitez utiliser le nouveau maven-publish plugin, vous pouvez télécharger vers différents référentiels en utilisant une instruction if:

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

Référence: maven-publish et définition de snapshotRepository et releaseRepository

46
Paolo Fulgoni