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 :

    Creative Commons
    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

    retourRetour vers le sommaire des tutoriels


  • Administrateurs

    Si un correcteur pouvait passer par ici ça serait génial.


  • Correcteurs

    Déjà fait.


  • Rédacteurs

    Je crois qu'il manque juste un mot là où il dit "Maintenant nous créer un repo …"


  • Correcteurs

    Merci, d'où l'importance de la deuxième relecture 😃


  • Administrateurs

    Par contre ça a explosé le formatage 😕
    Je corrige ça.



  • C'est toujours très difficile d'écrire avec une seule main


  • Administrateurs

    J'imagine ^^ Mais la je parlais de la correction. En éditant le message les balises bt ont sautés, elles faisaient 2 de hauteur.