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