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.
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é.
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