Mettre en ligne son mod au format maven via ftp
-
Sommaire
Introduction
Vous voulez mettre en ligne vos mods sur votre site web via ftp ? Alors vous êtes au bon endroit.
Pré-requis
Code
Tout d’abord, nous allons créer un fichier (ici je l’appelerai private.properties) pour y stocker notre identifiant ftp ainsi que le mot de passe (vous n’êtes pas obligé de le mettre dans un fichier à part mais si vous voulez mettre vos sources sur github, vous aurez juste à ajouter le fichier au .gitignore) :
Voici le contenu du fichier private.properties
ftp_adress=<l'adresse pour vous connecter via ftp>ftp_user=<votre identifiant>ftp_pw=<votre mot de passe>
NOTE : vous pouvez mettre ce que vous voulez avant le “=” tant que vous mettez le même par la suite
Maintenant nous allons devoir récupérer le contenu de ce fichier (de la même façon que dans le tutoriel Utiliser gradle pour gérer les dépendances) :
ext.privateConfigFile = file 'private.properties' // le nom de votre fichier privateConfigFile.withReader { def p = new Properties() p.load(it) project.ext.privateConfig = new ConfigSlurper().parse p // privateConfig sera le nom utilisé pour accéder aux valeurs }
Pour pouvoir utiliser la librairie de ant, nous allons la déclarer en dépendance :
configurations { ftpAntTask } // pour spécifier que l'on ne veut pas l'ajouter dans le classpath d'eclipse mais bien dans le script dependencies { ftpAntTask("org.apache.ant:ant-commons-net:1.9.4") { module("commons-net:commons-net:1.4.1") { dependencies "oro:oro:2.0.8:jar" } } // on ajoute la dépendance avec la configuration déclarée juste au-dessus } // vous pouvez placer ce code dans le block dependencies déjà créé au préalable, moi je préfère le mettre à part pour organiser les choses
Il va nous falloir une fonction pour publier via ftp :
void ftp(Map args, Closure antFileset = {}) { ant { taskdef(name: 'ftp', classname: 'org.apache.tools.ant.taskdefs.optional.net.FTP', classpath: configurations.ftpAntTask.asPath) // On utilise la dépendance délcarée au-dessus Map ftpArgs = args + [ verbose : 'yes', server : privateConfig.ftp_adress, // on indique le serveur userid : privateConfig.ftp_user, // l'utilisateur password: privateConfig.ftp_pw // le mot de passe ] delegate.ftp(ftpArgs) { // on exécute la commande antFileset.delegate = delegate antFileset() } } }
Maintenant nous allons créer un repo maven local pour ensuite le publier via ftp, personnellement j’ai choisis de le mettre dans build/repo :
apply plugin: 'maven-publish' // on utilise le plugin maven-publish publishing { publications { universal(MavenPublication) { // On publie le jar de base (ici universal n'a pas d'importance) artifact jar // on utilise l'archive jar } dev(MavenPublication) { // Si vous avez vu le bonus du tutoriel [Utiliser gradle pour gérer les dépendances](http://www.minecraftforgefrance.fr/showthread.php?tid=2689), vous pouvez publier la version déobfusquée artifact deobfJar } sources(MavenPublication) { // Et la version source (si vous voulez que gradle télécharge automatiquement les sources, il faut utiliser le classifier "sources") artifact sourceJar } } repositories { maven { url "$buildDir/repo" // on le publie en local } } }
Et pour finir, il faut envoyer tout ça avec une tâche :
task upload(dependsOn: 'publish') << { // ici j'envoie dans le dossier repo de mon ftp ftp(action: 'mkdir', remotedir: "repo") // on crée le dossier où on va mettre les fichiers ftp(action: 'send', remotedir: "repo") { // On envoie les fichiers fileset(dir: "$buildDir/repo") // On envoie ceux du dossier repo } }
Voilà ! Il ne vous reste plus qu’à faire gradlew build upload et tout sera publié !
D’accord c’est bien gentil ton truc mais comment on fait pour que gradle télécharge automatiquement mon mod avec les sources ?
Et bien comme dans mon dernier tutoriel, vous avez juste à ajouter ceci dans le block dependencies :
maven { name "<le nom de votre repo>" url "<l'url de votre site, chez moi : scarex.fr/repo>" }
Voici ce à quoi devrait/pourrait ressembler votre fichier build.gradle :
// Config ext.privateConfigFile = file 'private.properties' privateConfigFile.withReader { def p = new Properties() p.load(it) project.ext.privateConfig = new ConfigSlurper().parse p } // Upload configurations { ftpAntTask } dependencies { ftpAntTask("org.apache.ant:ant-commons-net:1.9.4") { module("commons-net:commons-net:1.4.1") { dependencies "oro:oro:2.0.8:jar" } } } void ftp(Map args, Closure antFileset = {}) { ant { taskdef(name: 'ftp', classname: 'org.apache.tools.ant.taskdefs.optional.net.FTP', classpath: configurations.ftpAntTask.asPath) Map ftpArgs = args + [ verbose : 'yes', server : privateConfig.ftp_adress, userid : privateConfig.ftp_user, password: privateConfig.ftp_pw ] delegate.ftp(ftpArgs) { antFileset.delegate = delegate antFileset() } } } task mavenUpload(dependsOn: 'publish') << { ftp(action: 'mkdir', remotedir: "repo") ftp(action: 'send', remotedir: "repo") { fileset(dir: "$buildDir/repo") } } apply plugin: 'maven-publish' publishing { publications { universal(MavenPublication) { artifact jar } dev(MavenPublication) { artifact deobfJar } sources(MavenPublication) { artifact sourceJar } } repositories { maven { url "$buildDir/repo" } } }
Crédits
Rédaction :
Correction :
Ce tutoriel de SCAREX publié sur Minecraft Forge France est mis à disposition selon les termes de la licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International -
Si un correcteur pouvait passer par ici ça serait génial.
-
Déjà fait.
-
Je crois qu’il manque juste un mot là où il dit “Maintenant nous créer un repo …”
-
Merci, d’où l’importance de la deuxième relecture
-
Par contre ça a explosé le formatage
Je corrige ça. -
C’est toujours très difficile d’écrire avec une seule main
-
J’imagine ^^ Mais la je parlais de la correction. En éditant le message les balises bt ont sautés, elles faisaient 2 de hauteur.
-
-
-