Derniers messages sur Zeste de Savoirhttps://zestedesavoir.com/forums/2021-04-21T12:40:37+02:00Les derniers messages parus sur le forum de Zeste de Savoir.Dépendance shadée d'une dépendance shadée introuvable, message #2334512021-04-21T12:40:37+02:00Amaury/@Amauryhttps://zestedesavoir.com/forums/sujet/15260/dependance-shadee-dune-dependance-shadee-introuvable/?page=1#p233451<figure><blockquote>
<p>Le message d’erreur semble se plaindre que <code>io.sentry.Sentry</code> [n’existe pas] et ça m’a l’air correct. Tu as bien un fichier Sentry.class dans ton jar, mais son chemin n’est pas <code>io/sentry/Sentry.class</code> donc la JVM considère ne parvient pas à le trouver sur son classpath. Est-ce que maven shade est censé changer tes imports pour utiliser le nouveau chemin?</p>
</blockquote><figcaption><a href="https://zestedesavoir.com/forums/sujet/15260/dependance-shadee-dune-dependance-shadee-introuvable/?page=1#p233437">Migwel</a></figcaption></figure>
<p>(J’ai ajouté entre crochets un bout de phrase que je pense manquant, corrige-moi si j’ai mal interprété)</p>
<p>Oui, c’est ce à quoi sert la partie <code>relocations</code> de la configuration de <code>maven-shade</code>.</p>
<p>Ceci : </p>
<div class="hljs-code-div hljs-code-xml"><div class="hljs-line-numbers"><span data-count="1"></span><span data-count="2"></span><span data-count="3"></span><span data-count="4"></span><span data-count="5"></span><span data-count="6"></span></div><pre><code class="hljs language-xml"><span class="hljs-tag"><<span class="hljs-name">relocations</span>></span>
<span class="hljs-tag"><<span class="hljs-name">relocation</span>></span>
<span class="hljs-tag"><<span class="hljs-name">pattern</span>></span>io.sentry<span class="hljs-tag"></<span class="hljs-name">pattern</span>></span>
<span class="hljs-tag"><<span class="hljs-name">shadedPattern</span>></span>fr.zcraft.sentrybukkit.sentry<span class="hljs-tag"></<span class="hljs-name">shadedPattern</span>></span>
<span class="hljs-tag"></<span class="hljs-name">relocation</span>></span>
<span class="hljs-tag"></<span class="hljs-name">relocations</span>></span>
</code></pre></div>
<p>…va renommer tous les imports de <code>io.sentry</code> vers <code>fr.zcraft.sentrybukkit.sentry</code> lors de la construction du JAR (ce qui peut se voir dans certaines exceptions, d’ailleurs).</p>
<p>Le souci semble être que ce premier renommage n’est pas connu de la seconde compilation (qui utilise <code>sentry-bukkit</code> comme dépendance… ce qui fait que sauf à déclarer la dépendance explicitement (ce qui peut se faire mais bon c’est pas super propre), la JVM ne trouve plus ses petits.</p>
<p>Après, peu importe la méthode, tant que mon objectif est rempli, à savoir : </p>
<ul>
<li>pouvoir dépendre d’un JAR avec le moins d’extras possible ;</li>
<li>qui apporte une autre dépendance avec lui (<code>sentry-log4j2</code>) ;</li>
<li>dépendance qui doit être dans le JAR car impossible de modifier l’environnement d’exécution par un autre biais.</li>
</ul>
<hr>
<figure><blockquote>
<p><a href="https://stackoverflow.com/questions/29807418/refactoring-import-statements-using-shade-relocations-in-maven">Sur stackoverflow</a>, quelqu’un propose d’utiliser <code>shadedArtifactAttached</code> mais je ne suis pas certain que ça aide ici.</p>
</blockquote><figcaption><a href="https://zestedesavoir.com/forums/sujet/15260/dependance-shadee-dune-dependance-shadee-introuvable/?page=1#p233437">Migwel</a></figcaption></figure>
<p>Malheureusement ça ne semble pas aider. En réalité c’est limite pire, sans que je ne comprenne trop pourquoi (ce que ça fait n’est pas super clair dans ma tête) : je n’arrive plus à utiliser Sentry depuis <code>sentry-bukkit</code> (qui en dépend donc directement) <img src="/static/smileys/svg/hihi.svg" alt="^^" class="smiley"> .</p>
<div class="hljs-code-div hljs-code-text"><div class="hljs-line-numbers"><span data-count="1"></span><span data-count="2"></span><span data-count="3"></span><span data-count="4"></span><span data-count="5"></span><span data-count="6"></span><span data-count="7"></span><span data-count="8"></span><span data-count="9"></span><span data-count="10"></span><span data-count="11"></span><span data-count="12"></span><span data-count="13"></span><span data-count="14"></span><span data-count="15"></span><span data-count="16"></span></div><pre><code class="hljs language-text">[12:37:04 ERROR]: [org.bukkit.craftbukkit.v1_16_R2.CraftServer] io/sentry/Sentry$OptionsConfiguration initializing Ping v1.2.1 (Is it up to date?)
java.lang.NoClassDefFoundError: io/sentry/Sentry$OptionsConfiguration
at fr.zcraft.Ping.libs.sentrybukkit.SentryBukkit.init(SentryBukkit.java:100) ~[?:?]
at fr.zcraft.Ping.Ping.onLoad(Ping.java:16) ~[?:?]
at org.bukkit.craftbukkit.v1_16_R2.CraftServer.loadPlugins(CraftServer.java:394) ~[patched_1.16.3.jar:git-Paper-253]
at net.minecraft.server.v1_16_R2.DedicatedServer.init(DedicatedServer.java:204) ~[patched_1.16.3.jar:git-Paper-253]
at net.minecraft.server.v1_16_R2.MinecraftServer.w(MinecraftServer.java:939) ~[patched_1.16.3.jar:git-Paper-253]
at net.minecraft.server.v1_16_R2.MinecraftServer.lambda$a$0(MinecraftServer.java:177) ~[patched_1.16.3.jar:git-Paper-253]
at java.lang.Thread.run(Thread.java:832) [?:?]
Caused by: java.lang.ClassNotFoundException: io.sentry.Sentry$OptionsConfiguration
at java.net.URLClassLoader.findClass(URLClassLoader.java:435) ~[?:?]
at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:171) ~[patched_1.16.3.jar:git-Paper-253]
at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:100) ~[patched_1.16.3.jar:git-Paper-253]
at java.lang.ClassLoader.loadClass(ClassLoader.java:589) ~[?:?]
at java.lang.ClassLoader.loadClass(ClassLoader.java:522) ~[?:?]
... 7 more
</code></pre></div>
<hr>
<p>Si jamais, le code source complet <a href="https://github.com/zDevelopers/sentry-bukkit/blob/master/pom.xml">du SDK</a> et <a href="https://github.com/zDevelopers/UsefulPing/blob/feature-watch-them-all-in-sentry/pom.xml">du projet utilisateur</a> sont dispos, depuis.</p>Dépendance shadée d'une dépendance shadée introuvable, message #2334372021-04-21T10:24:26+02:00Migwel/@Migwelhttps://zestedesavoir.com/forums/sujet/15260/dependance-shadee-dune-dependance-shadee-introuvable/?page=1#p233437<p>Je n’ai jamais vraiment joué avec <code>shade</code> donc peut-être que cette réponse ne sera pas pertinente mais je veux être sûr de bien comprendre. Le message d’erreur semble se plaindre que <code>io.sentry.Sentry</code> et ça m’a l’air correct. Tu as bien un fichier Sentry.class dans ton jar, mais son chemin n’est pas <code>io/sentry/Sentry.class</code> donc la JVM considère ne parvient pas à le trouver sur son classpath. Est-ce que maven shade est censé changer tes imports pour utiliser le nouveau chemin?</p>
<p><a href="https://stackoverflow.com/questions/29807418/refactoring-import-statements-using-shade-relocations-in-maven">Sur stackoverflow</a>, quelqu’un propose d’utiliser <code>shadedArtifactAttached</code> mais je ne suis pas certain que ça aide ici.</p>Dépendance shadée d'une dépendance shadée introuvable, message #2334282021-04-20T23:44:09+02:00Amaury/@Amauryhttps://zestedesavoir.com/forums/sujet/15260/dependance-shadee-dune-dependance-shadee-introuvable/?page=1#p233428<p>Salut !</p>
<p>En Java, je suis en train d’écrire une bibliothèque conçue pour être intégrée via <code>maven-shade</code>. Concrètement, j’écris un SDK Sentry (basé sur <a href="https://docs.sentry.io/platforms/java/guides/log4j2/">le SDK <code>sentry-log4j2</code></a>) pour une plateforme ayant certaines spécificités (Spigot, API Bukkit) et utilisant log4j2.</p>
<p>Concrètement, c’est une plateforme à laquelle on s’intègre via des plugins qui ont leur propre class loader. Je n’ai pas de contrôle sur l’installation elle-même (donc je ne peux utiliser la méthode normale de <code>sentry-log4j2</code> en ajoutant un <code>Appender</code> dans la configuration de log4j2 — il faut que je le fasse autrement, en contournant un peu, d’où le fait d’écrire un SDK réutilisable pour ne s’embêter qu’une fois).</p>
<p>Une autre implication de cette architecture est que je ne peux pas ajouter des dépendances comme ça au <em>runtime</em>. Il faut que je <em>shade</em> toutes les dépendances qui ne sont pas de base disponibles dans mon JAR qui sera chargé.</p>
<p>Avec ces contraintes en tête, voici ce que j’ai tenté. J’ai donc deux projets : <code>sentry-bukkit</code> (mon SDK Sentry basé sur <code>sentry-log4j2</code>), et un projet Bukkit l’utilisant. <code>sentry-bukkit</code> contient quelques classes servant en gros à configurer le SDK <code>sentry-log4j2</code> correctement, et derrière les API classiques du SDK Java de Sentry peuvent être utilisées (c’est également comme cela que fonctionnent les versions spécialisées de l’API Java de Sentry, d’ailleurs : elles configurent juste le SDK Java et l’intègrent à l’environnement).</p>
<p>Le POM de <code>sentry-bukkit</code> ressemble à cela, en retirant les parties inutiles.</p>
<div class="custom-block custom-block-spoiler"><div class="custom-block-heading"><code>pom.xml</code> de <code>sentry-bukkit</code></div><div class="custom-block-body"><div class="hljs-code-div hljs-code-xml"><div class="hljs-line-numbers"><span data-count="1"></span><span data-count="2"></span><span data-count="3"></span><span data-count="4"></span><span data-count="5"></span><span data-count="6"></span><span data-count="7"></span><span data-count="8"></span><span data-count="9"></span><span data-count="10"></span><span data-count="11"></span><span data-count="12"></span><span data-count="13"></span><span data-count="14"></span><span data-count="15"></span><span data-count="16"></span><span data-count="17"></span><span data-count="18"></span><span data-count="19"></span><span data-count="20"></span><span data-count="21"></span><span data-count="22"></span><span data-count="23"></span><span data-count="24"></span><span data-count="25"></span><span data-count="26"></span><span data-count="27"></span><span data-count="28"></span><span data-count="29"></span><span data-count="30"></span><span data-count="31"></span><span data-count="32"></span><span data-count="33"></span><span data-count="34"></span><span data-count="35"></span><span data-count="36"></span><span data-count="37"></span><span data-count="38"></span><span data-count="39"></span><span data-count="40"></span><span data-count="41"></span><span data-count="42"></span><span data-count="43"></span><span data-count="44"></span><span data-count="45"></span><span data-count="46"></span><span data-count="47"></span><span data-count="48"></span><span data-count="49"></span><span data-count="50"></span><span data-count="51"></span><span data-count="52"></span><span data-count="53"></span><span data-count="54"></span><span data-count="55"></span><span data-count="56"></span><span data-count="57"></span><span data-count="58"></span><span data-count="59"></span><span data-count="60"></span><span data-count="61"></span><span data-count="62"></span><span data-count="63"></span><span data-count="64"></span><span data-count="65"></span><span data-count="66"></span></div><pre><code class="hljs language-xml"><span class="hljs-comment"><!-- retiré : ids, version, repos & properties --></span>
<span class="hljs-tag"><<span class="hljs-name">dependencies</span>></span>
<span class="hljs-tag"><<span class="hljs-name">dependency</span>></span>
<span class="hljs-tag"><<span class="hljs-name">groupId</span>></span>org.apache.logging.log4j<span class="hljs-tag"></<span class="hljs-name">groupId</span>></span>
<span class="hljs-tag"><<span class="hljs-name">artifactId</span>></span>log4j-api<span class="hljs-tag"></<span class="hljs-name">artifactId</span>></span>
<span class="hljs-tag"><<span class="hljs-name">version</span>></span>2.13.3<span class="hljs-tag"></<span class="hljs-name">version</span>></span>
<span class="hljs-tag"></<span class="hljs-name">dependency</span>></span>
<span class="hljs-tag"><<span class="hljs-name">dependency</span>></span>
<span class="hljs-tag"><<span class="hljs-name">groupId</span>></span>org.apache.logging.log4j<span class="hljs-tag"></<span class="hljs-name">groupId</span>></span>
<span class="hljs-tag"><<span class="hljs-name">artifactId</span>></span>log4j-core<span class="hljs-tag"></<span class="hljs-name">artifactId</span>></span>
<span class="hljs-tag"><<span class="hljs-name">version</span>></span>2.13.3<span class="hljs-tag"></<span class="hljs-name">version</span>></span>
<span class="hljs-tag"></<span class="hljs-name">dependency</span>></span>
<span class="hljs-tag"><<span class="hljs-name">dependency</span>></span>
<span class="hljs-tag"><<span class="hljs-name">groupId</span>></span>io.sentry<span class="hljs-tag"></<span class="hljs-name">groupId</span>></span>
<span class="hljs-tag"><<span class="hljs-name">artifactId</span>></span>sentry-log4j2<span class="hljs-tag"></<span class="hljs-name">artifactId</span>></span>
<span class="hljs-tag"><<span class="hljs-name">version</span>></span>4.3.0<span class="hljs-tag"></<span class="hljs-name">version</span>></span>
<span class="hljs-tag"><<span class="hljs-name">scope</span>></span>compile<span class="hljs-tag"></<span class="hljs-name">scope</span>></span>
<span class="hljs-tag"></<span class="hljs-name">dependency</span>></span>
<span class="hljs-comment"><!-- Il y a d'autres dépendances (bukkit, jetbrains annotation) mais ici osef --></span>
<span class="hljs-tag"></<span class="hljs-name">dependencies</span>></span>
<span class="hljs-tag"><<span class="hljs-name">build</span>></span>
<span class="hljs-tag"><<span class="hljs-name">plugins</span>></span>
<span class="hljs-tag"><<span class="hljs-name">plugin</span>></span>
<span class="hljs-tag"><<span class="hljs-name">groupId</span>></span>org.apache.maven.plugins<span class="hljs-tag"></<span class="hljs-name">groupId</span>></span>
<span class="hljs-tag"><<span class="hljs-name">artifactId</span>></span>maven-shade-plugin<span class="hljs-tag"></<span class="hljs-name">artifactId</span>></span>
<span class="hljs-tag"><<span class="hljs-name">version</span>></span>3.1.0<span class="hljs-tag"></<span class="hljs-name">version</span>></span>
<span class="hljs-tag"><<span class="hljs-name">configuration</span>></span>
<span class="hljs-tag"><<span class="hljs-name">createDependencyReducedPom</span>></span>false<span class="hljs-tag"></<span class="hljs-name">createDependencyReducedPom</span>></span>
<span class="hljs-tag"><<span class="hljs-name">artifactSet</span>></span>
<span class="hljs-tag"><<span class="hljs-name">includes</span>></span>
<span class="hljs-comment"><!-- Je suis obligé de shader sentry car pas dispo au runtime --></span>
<span class="hljs-tag"><<span class="hljs-name">include</span>></span>io.sentry:sentry<span class="hljs-tag"></<span class="hljs-name">include</span>></span>
<span class="hljs-tag"><<span class="hljs-name">include</span>></span>io.sentry:sentry-log4j2<span class="hljs-tag"></<span class="hljs-name">include</span>></span>
<span class="hljs-comment"><!-- ceux là devraient l'être mais étrangement ça compile pas sans --></span>
<span class="hljs-comment"><!-- peut-être à cause du classloader louche utilisé ? --></span>
<span class="hljs-tag"><<span class="hljs-name">include</span>></span>org.apache.logging.log4j:log4j-core<span class="hljs-tag"></<span class="hljs-name">include</span>></span>
<span class="hljs-tag"><<span class="hljs-name">include</span>></span>org.apache.logging.log4j:log4j-api<span class="hljs-tag"></<span class="hljs-name">include</span>></span>
<span class="hljs-tag"></<span class="hljs-name">includes</span>></span>
<span class="hljs-tag"></<span class="hljs-name">artifactSet</span>></span>
<span class="hljs-tag"><<span class="hljs-name">relocations</span>></span>
<span class="hljs-tag"><<span class="hljs-name">relocation</span>></span>
<span class="hljs-tag"><<span class="hljs-name">pattern</span>></span>io.sentry<span class="hljs-tag"></<span class="hljs-name">pattern</span>></span>
<span class="hljs-tag"><<span class="hljs-name">shadedPattern</span>></span>fr.zcraft.sentrybukkit.sentry<span class="hljs-tag"></<span class="hljs-name">shadedPattern</span>></span>
<span class="hljs-tag"></<span class="hljs-name">relocation</span>></span>
<span class="hljs-tag"><<span class="hljs-name">relocation</span>></span>
<span class="hljs-tag"><<span class="hljs-name">pattern</span>></span>org.apache.logging.log4j<span class="hljs-tag"></<span class="hljs-name">pattern</span>></span>
<span class="hljs-tag"><<span class="hljs-name">shadedPattern</span>></span>fr.zcraft.sentrybukkit.log4j<span class="hljs-tag"></<span class="hljs-name">shadedPattern</span>></span>
<span class="hljs-tag"></<span class="hljs-name">relocation</span>></span>
<span class="hljs-tag"></<span class="hljs-name">relocations</span>></span>
<span class="hljs-tag"><<span class="hljs-name">minimizeJar</span>></span>true<span class="hljs-tag"></<span class="hljs-name">minimizeJar</span>></span>
<span class="hljs-tag"></<span class="hljs-name">configuration</span>></span>
<span class="hljs-tag"><<span class="hljs-name">executions</span>></span>
<span class="hljs-tag"><<span class="hljs-name">execution</span>></span>
<span class="hljs-tag"><<span class="hljs-name">phase</span>></span>package<span class="hljs-tag"></<span class="hljs-name">phase</span>></span>
<span class="hljs-tag"><<span class="hljs-name">goals</span>></span>
<span class="hljs-tag"><<span class="hljs-name">goal</span>></span>shade<span class="hljs-tag"></<span class="hljs-name">goal</span>></span>
<span class="hljs-tag"></<span class="hljs-name">goals</span>></span>
<span class="hljs-tag"></<span class="hljs-name">execution</span>></span>
<span class="hljs-tag"></<span class="hljs-name">executions</span>></span>
<span class="hljs-tag"></<span class="hljs-name">plugin</span>></span>
<span class="hljs-tag"></<span class="hljs-name">plugins</span>></span>
<span class="hljs-tag"></<span class="hljs-name">build</span>></span>
</code></pre></div></div></div>
<p>Du côté des projets <em>utilisant</em> le SDK, je dois <em>aussi</em> shader le SDK pour la même raison : tout doit être dans le JAR du plugin, je ne peux pas toucher au runtime autrement. Ce POM est simplifié : en réalité je <em>shade</em> aussi une autre bibliothèque qui elle fonctionne très bien.</p>
<div class="custom-block custom-block-spoiler"><div class="custom-block-heading"><code>pom.xml</code> d’un projet utilisant <code>sentry-bukkit</code></div><div class="custom-block-body"><div class="hljs-code-div hljs-code-xml"><div class="hljs-line-numbers"><span data-count="1"></span><span data-count="2"></span><span data-count="3"></span><span data-count="4"></span><span data-count="5"></span><span data-count="6"></span><span data-count="7"></span><span data-count="8"></span><span data-count="9"></span><span data-count="10"></span><span data-count="11"></span><span data-count="12"></span><span data-count="13"></span><span data-count="14"></span><span data-count="15"></span><span data-count="16"></span><span data-count="17"></span><span data-count="18"></span><span data-count="19"></span><span data-count="20"></span><span data-count="21"></span><span data-count="22"></span><span data-count="23"></span><span data-count="24"></span><span data-count="25"></span><span data-count="26"></span><span data-count="27"></span><span data-count="28"></span><span data-count="29"></span><span data-count="30"></span><span data-count="31"></span><span data-count="32"></span><span data-count="33"></span><span data-count="34"></span><span data-count="35"></span><span data-count="36"></span><span data-count="37"></span><span data-count="38"></span><span data-count="39"></span><span data-count="40"></span></div><pre><code class="hljs language-xml"><span class="hljs-tag"><<span class="hljs-name">dependencies</span>></span>
<span class="hljs-comment"><!-- ... d'autres deps ... --></span>
<span class="hljs-tag"><<span class="hljs-name">dependency</span>></span>
<span class="hljs-tag"><<span class="hljs-name">groupId</span>></span>fr.zcraft<span class="hljs-tag"></<span class="hljs-name">groupId</span>></span>
<span class="hljs-tag"><<span class="hljs-name">artifactId</span>></span>sentry-bukkit<span class="hljs-tag"></<span class="hljs-name">artifactId</span>></span>
<span class="hljs-tag"><<span class="hljs-name">version</span>></span>1.0-SNAPSHOT<span class="hljs-tag"></<span class="hljs-name">version</span>></span>
<span class="hljs-tag"></<span class="hljs-name">dependency</span>></span>
<span class="hljs-tag"></<span class="hljs-name">dependencies</span>></span>
<span class="hljs-tag"><<span class="hljs-name">build</span>></span>
<span class="hljs-tag"><<span class="hljs-name">plugins</span>></span>
<span class="hljs-tag"><<span class="hljs-name">plugin</span>></span>
<span class="hljs-tag"><<span class="hljs-name">groupId</span>></span>org.apache.maven.plugins<span class="hljs-tag"></<span class="hljs-name">groupId</span>></span>
<span class="hljs-tag"><<span class="hljs-name">artifactId</span>></span>maven-shade-plugin<span class="hljs-tag"></<span class="hljs-name">artifactId</span>></span>
<span class="hljs-tag"><<span class="hljs-name">version</span>></span>3.2.4<span class="hljs-tag"></<span class="hljs-name">version</span>></span>
<span class="hljs-tag"><<span class="hljs-name">configuration</span>></span>
<span class="hljs-tag"><<span class="hljs-name">minimizeJar</span>></span>true<span class="hljs-tag"></<span class="hljs-name">minimizeJar</span>></span>
<span class="hljs-tag"><<span class="hljs-name">artifactSet</span>></span>
<span class="hljs-tag"><<span class="hljs-name">includes</span>></span>
<span class="hljs-tag"><<span class="hljs-name">include</span>></span>fr.zcraft:sentry-bukkit<span class="hljs-tag"></<span class="hljs-name">include</span>></span>
<span class="hljs-tag"></<span class="hljs-name">includes</span>></span>
<span class="hljs-tag"></<span class="hljs-name">artifactSet</span>></span>
<span class="hljs-tag"><<span class="hljs-name">relocations</span>></span>
<span class="hljs-tag"><<span class="hljs-name">relocation</span>></span>
<span class="hljs-tag"><<span class="hljs-name">pattern</span>></span>fr.zcraft.sentrybukkit<span class="hljs-tag"></<span class="hljs-name">pattern</span>></span>
<span class="hljs-tag"><<span class="hljs-name">shadedPattern</span>></span>le.projet.quelconque.libs.sentrybukkit<span class="hljs-tag"></<span class="hljs-name">shadedPattern</span>></span>
<span class="hljs-tag"></<span class="hljs-name">relocation</span>></span>
<span class="hljs-tag"></<span class="hljs-name">relocations</span>></span>
<span class="hljs-tag"></<span class="hljs-name">configuration</span>></span>
<span class="hljs-tag"><<span class="hljs-name">executions</span>></span>
<span class="hljs-tag"><<span class="hljs-name">execution</span>></span>
<span class="hljs-tag"><<span class="hljs-name">phase</span>></span>package<span class="hljs-tag"></<span class="hljs-name">phase</span>></span>
<span class="hljs-tag"><<span class="hljs-name">goals</span>></span>
<span class="hljs-tag"><<span class="hljs-name">goal</span>></span>shade<span class="hljs-tag"></<span class="hljs-name">goal</span>></span>
<span class="hljs-tag"></<span class="hljs-name">goals</span>></span>
<span class="hljs-tag"></<span class="hljs-name">execution</span>></span>
<span class="hljs-tag"></<span class="hljs-name">executions</span>></span>
<span class="hljs-tag"></<span class="hljs-name">plugin</span>></span>
<span class="hljs-tag"></<span class="hljs-name">plugins</span>></span>
<span class="hljs-tag"></<span class="hljs-name">build</span>></span>
</code></pre></div></div></div>
<p>J’utilise tout ça de cette façon, en gros.</p>
<div class="hljs-code-div hljs-code-java"><div class="hljs-line-numbers"><span data-count="1" class="hll"></span><span data-count="2"></span><span data-count="3"></span><span data-count="4"></span><span data-count="5"></span><span data-count="6"></span><span data-count="7"></span><span data-count="8" class="hll"></span><span data-count="9"></span><span data-count="10"></span><span data-count="11"></span><span data-count="12"></span></div><pre><code class="hljs language-java">SentryBukkit.init(<span class="hljs-keyword">this</span>, <span class="hljs-string">"https://mon-dsn@o475316.ingest.sentry.io/123456"</span>);
<span class="hljs-comment">// ...</span>
<span class="hljs-keyword">try</span> {
<span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> Exception(<span class="hljs-string">"This is a toast. Yummy!"</span>);
} <span class="hljs-keyword">catch</span> (Exception e) {
Sentry.captureException(e);
}
<span class="hljs-comment">// Ça fonctionnera aussi avec les exceptions non-attrapées</span>
<span class="hljs-comment">// en s'intégrant au système de logs, mais peu importe ici.</span>
</code></pre></div>
<p>Puis je compile les deux successivement avec <code>mvn clean install</code>. La première ligne surlignée fonctionne correctement, comme on peut s’y attendre. Par contre, la seconde échoue avec une belle erreur m’informant que la classe n’est pas trouvée.</p>
<div class="custom-block custom-block-spoiler"><div class="custom-block-heading">java.lang.NoClassDefFoundError: io/sentry/Sentry</div><div class="custom-block-body"><div class="hljs-code-div hljs-code-text"><div class="hljs-line-numbers"><span data-count="1"></span><span data-count="2"></span><span data-count="3"></span><span data-count="4"></span><span data-count="5"></span><span data-count="6"></span><span data-count="7"></span><span data-count="8"></span><span data-count="9"></span><span data-count="10"></span><span data-count="11"></span><span data-count="12"></span><span data-count="13"></span><span data-count="14"></span><span data-count="15"></span><span data-count="16"></span><span data-count="17"></span><span data-count="18"></span><span data-count="19"></span></div><pre><code class="hljs language-text">java.lang.NoClassDefFoundError: io/sentry/Sentry
at fr.zcraft.Ping.Ping.onEnable(Ping.java:35) ~[?:?]
at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:263) ~[patched_1.16.3.jar:git-Paper-253]
at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:380) ~[patched_1.16.3.jar:git-Paper-253]
at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:483) ~[patched_1.16.3.jar:git-Paper-253]
at org.bukkit.craftbukkit.v1_16_R2.CraftServer.enablePlugin(CraftServer.java:501) ~[patched_1.16.3.jar:git-Paper-253]
at org.bukkit.craftbukkit.v1_16_R2.CraftServer.enablePlugins(CraftServer.java:415) ~[patched_1.16.3.jar:git-Paper-253]
at net.minecraft.server.v1_16_R2.MinecraftServer.loadWorld(MinecraftServer.java:468) ~[patched_1.16.3.jar:git-Paper-253]
at net.minecraft.server.v1_16_R2.DedicatedServer.init(DedicatedServer.java:237) ~[patched_1.16.3.jar:git-Paper-253]
at net.minecraft.server.v1_16_R2.MinecraftServer.w(MinecraftServer.java:939) ~[patched_1.16.3.jar:git-Paper-253]
at net.minecraft.server.v1_16_R2.MinecraftServer.lambda$a$0(MinecraftServer.java:177) ~[patched_1.16.3.jar:git-Paper-253]
at java.lang.Thread.run(Thread.java:832) [?:?]
Caused by: java.lang.ClassNotFoundException: io.sentry.Sentry
at java.net.URLClassLoader.findClass(URLClassLoader.java:435) ~[?:?]
at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:171) ~[patched_1.16.3.jar:git-Paper-253]
at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:100) ~[patched_1.16.3.jar:git-Paper-253]
at java.lang.ClassLoader.loadClass(ClassLoader.java:589) ~[?:?]
at java.lang.ClassLoader.loadClass(ClassLoader.java:522) ~[?:?]
... 11 more
</code></pre></div></div></div>
<p>Pourtant, en ouvrant le JAR du projet dépendant de <code>sentry-bukkit</code>, on trouve bien le <code>.class</code> qui va bien.</p>
<figure><img src="/media/galleries/5995/2f2a416f-6cfd-45a8-8e1f-5a29b4b889fb.png" alt="Le `.class` existe dans le JAR final, pas de souci"><figcaption>Le <code>.class</code> existe dans le JAR final, pas de souci</figcaption></figure>
<p>Je soupçonne donc que le souci soit lié au fait qu’on a ici <em>deux</em> relocalisations par Maven et que le second <code>shade</code> ne re-transforme pas correctement le premier. La classe est bien là, mais Java ne sait pas la retrouver car il n’a plus l’info de la première relocalisation lors du second shading.</p>
<p>Si je dépends directement de <code>sentry-log4j2</code> dans le projet utilisant le SDK (en le shadant aussi), ça fonctionne correctement. Mais ça implique de devoir dépendre des deux : c’est plus lourd à l’utilisation. Si possible, j’aimerais pouvoir ne dépendre que de mon SDK <code>sentry-bukkit</code> sans avoir à ajouter une ou deux autres dépendances à également <em>shader</em>.</p>
<p>D’où ma question : est-ce possible de résoudre ce problème, ou faudra-t-il forcément demander aux utilsateurs de dépendre des deux bibliothèques ? Normalement, ça ne devrait pas poser de souci, mais le shading et la relocation cassent les pieds.</p>
<p>Ou alors peut-être est-ce possible de s’en passer, mais il me semble que c’est mieux pour éviter d’éventuels conflits avec d’autres plugins incluant le même SDK shadé… sachant que la classe doit être un singleton indépendant par plugin l’utilisant. Et qu’un tel cas d’usage multiple se produira forcément : lorsque ce sera au point, je compte bien l’utiliser pour tous mes projets du genre, histoire de tout centraliser sur Sentry (c’est tellement pratique).</p>
<p>À noter que si la solution est « utilise plutôt Gradle de la façon suivante », ça me va aussi, j’suis pas sectaire. Et s’il n’y en a pas… well, la documentation servira à ça mais s’il y a une solution plus jolie, je préfère <img src="/static/smileys/svg/langue.svg" alt=":p" class="smiley"> .</p>
<p>Merci d’avoir lu ce bien trop long post, et merci d’avance pour toute idée !</p>Lancer les tests JUnit avec Cobertura, message #1394612017-01-25T00:05:30+01:00thedede/@thededehttps://zestedesavoir.com/forums/sujet/7793/lancer-les-tests-junit-avec-cobertura/?page=1#p139461<p>Oh ! Un projet gl-iste <img alt=":D" src="/static/smileys/heureux.png"></p>Lancer les tests JUnit avec Cobertura, message #1388212017-01-16T21:17:08+01:00Vayel/@Vayelhttps://zestedesavoir.com/forums/sujet/7793/lancer-les-tests-junit-avec-cobertura/?page=1#p138821<p>Le projet consiste à écrire une compilateur. J’ai alors un ensemble de fichiers sources pour lesquels je vérifie que le code de retour est bon (selon si le fichier est valide syntaxique, contextuellement, à l’exécution, ou invalide) ainsi que la sortie produite.</p>
<p>J’ai également (entre autre) un script qui mesure le temps d’exécution entre les compilations séquencielle et parallèle pour s’assurer que la seconde est plus efficace.</p>Lancer les tests JUnit avec Cobertura, message #1388172017-01-16T20:32:35+01:00Javier/@Javierhttps://zestedesavoir.com/forums/sujet/7793/lancer-les-tests-junit-avec-cobertura/?page=1#p138817<p>Pourquoi passer par des scripts personnalisés (plutôt qu’un runner JUnit, par exemple) ?</p>Lancer les tests JUnit avec Cobertura, message #1387862017-01-16T17:50:03+01:00Vayel/@Vayelhttps://zestedesavoir.com/forums/sujet/7793/lancer-les-tests-junit-avec-cobertura/?page=1#p138786<p>Bonjour,</p>
<p>Je travaille en Java avec Maven et je souhaite évaluer la couverture de tests de mon code. Pour cela, j’utilise sur les conseils des profs Cobertura. Seulement, je passe aussi par le plugin <code>exec</code> pour lancer des scripts de test personnalisés, du type :</p>
<div><table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre>1
2
3
4
5</pre></div></td><td class="code"><div class="codehilite"><pre><span></span><span class="nv">HOME</span><span class="o">=</span><span class="k">$(</span><span class="nb">cd</span> <span class="s2">"</span><span class="k">$(</span>dirname <span class="s2">"</span><span class="nv">$0</span><span class="s2">"</span><span class="k">)</span><span class="s2">"</span>/../../../../ <span class="o">&&</span> <span class="nb">pwd</span><span class="k">)</span>
<span class="nv">CP_FILE</span><span class="o">=</span><span class="s2">"</span><span class="nv">$HOME</span><span class="s2">"</span>/target/generated-sources/classpath.txt
<span class="nv">CP</span><span class="o">=</span><span class="s2">"</span><span class="nv">$HOME</span><span class="s2">"</span>/target/generated-classes/cobertura:<span class="s2">"</span><span class="nv">$HOME</span><span class="s2">"</span>/target/test-classes/:<span class="s2">"</span><span class="nv">$HOME</span><span class="s2">"</span>/target/classes/:<span class="k">$(</span>cat <span class="s2">"</span><span class="nv">$CP_FILE</span><span class="s2">"</span><span class="k">)</span>
java -enableassertions -cp <span class="s2">"</span><span class="nv">$CP</span><span class="s2">"</span> ma_classe <span class="s2">"</span><span class="nv">$@</span><span class="s2">"</span>
</pre></div>
</td></tr></table></div>
<p>Or il apparaît que Cobertura gère mal ce genre de scripts (le mauvais exécutable est parfois appelé). L’idée serait alors, plutôt que d’appeler <code>mvn cobertura:cobertura</code>, de compiler le projet, d’instrumentaliser les classes avec Cobertura (<code>mvn cobertura:instrument</code>), de lancer les tests manuellement puis de générer le rapport.</p>
<p>Mes scripts sont bien pris en compte, vu que j’ajoute en tête du <code>CLASSPATH</code> les classes instrumentalisée (<code>target/generated-classes/cobertura</code>). Mais j’ignore comment procéder de même pour les tests unitaires (JUnit). En effet, le script suivant génère un rapport avec une couverture nulle, signe que les tests unitaires ne sont pas pris en compte :</p>
<div><table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre>1
2
3
4
5
6
7</pre></div></td><td class="code"><div class="codehilite"><pre><span></span>mvn cobertura:clean
mvn cobertura:instrument
mvn surefire:test
<span class="c1"># Génération du rapport</span>
<span class="c1"># ...</span>
</pre></div>
</td></tr></table></div>
<p>Merci !</p>Tester uniquement certains fichiers avec Checkstyle, message #1375932017-01-05T14:48:34+01:00Vayel/@Vayelhttps://zestedesavoir.com/forums/sujet/7713/tester-uniquement-certains-fichiers-avec-checkstyle/?page=1#p137593<p>Merci beaucoup pour ta réponse. Je pense donc abandonner Checkstyle.</p>Tester uniquement certains fichiers avec Checkstyle, message #1375882017-01-05T13:55:13+01:00Javier/@Javierhttps://zestedesavoir.com/forums/sujet/7713/tester-uniquement-certains-fichiers-avec-checkstyle/?page=1#p137588<p><a href="https://maven.apache.org/plugins/maven-checkstyle-plugin/check-mojo.html#includes">https://maven.apache.org/plugins/maven-checkstyle-plugin/check-mojo.html#includes</a></p>
<p>Mais franchement l’intérêt de Checkstyle est très limité. </p>
<p>A la rigueur prenez un IDE correct et partagez-vous un fichier de conf (même si vous n’utilisez pas tous le même IDE, d’ailleurs, on peut importer la conf. Eclipse dans IntelliJ par ex).</p>
<p>Mais au final, je préfère 200 fois un sonar (ou findbugs, ou autre) bien configuré plutôt que checkstyle, qui pour moi a très peu d’intérêt à part forcer à mettre des <code>final</code> là où on s’en fout, ou imposer où mettre des <code>{</code>, ce qui n’a franchement aucune importance et va voler en éclats dès que quelqu’un d’autre reprendra le projet.</p>
<p>tl;dr : c’est possible, mais à mon sens c’est de la pure perte de temps.</p>Tester uniquement certains fichiers avec Checkstyle, message #1375482017-01-05T11:08:22+01:00Vayel/@Vayelhttps://zestedesavoir.com/forums/sujet/7713/tester-uniquement-certains-fichiers-avec-checkstyle/?page=1#p137548<p>Bonjour,</p>
<p>Je travaille avec Java et j’utilise le plugin Checkstyle avec Maven pour m’assurer du respect du <em>coding-style</em>. Seulement, je pars d’un projet contenant beaucoup de fichiers, certains à éditer, et tous ne passent pas les tests. J’obtiens donc des erreurs qui ne m’intéresse pas, vu que je souhaite uniquement tester les fichiers que je crée/modifie.</p>
<p>Malgré mes recherches, je ne parviens pas à trouver comment configurer Checkstyle pour qu’il ne prenne en compte que certains fichiers. En fait, je souhaiterais pouvoir lui fournir une liste explicite de fichiers à vérifier.</p>
<p>Auriez-vous des conseils à ce sujet ?</p>
<p>Merci !</p>Ajout de dépendaces natives (*.so), message #1149642016-06-21T11:46:20+02:00Bermudes/@Bermudeshttps://zestedesavoir.com/forums/sujet/6281/ajout-de-dependaces-natives-so/?page=1#p114964<p>Hey Bl@de,</p>
<p>merci de t'intéresser au problème. Ah non je n'ai pas essayé cela.</p>
<p>Concernant gradle, comme dit dans mon post original, j'ai essayé d'installer plusieurs versions de gradle et à chaque fois j'avais le même problème : quand je lançais gradle en ligne de commande, il bouffait tout mon processeur et rien ne se passait puis tout plantait.</p>
<p>Pour une autre lib 2D, ce serait sans problème vu que j'ai vite fait une recherche sur DDG et Slick2D a fait partie des premiers, j'en avais déduit qu'il devait être relativement utilisé. Mais si tu me dis que libGDX est plus complet et toujours en dev alors que Slick2D n'est plus maintenu, autant migrer sur libGDX !</p>Ajout de dépendaces natives (*.so), message #1148072016-06-20T13:34:30+02:00Nutr1z (Bl@dE)/@Nutr1z%20%28Bl%40dE%29https://zestedesavoir.com/forums/sujet/6281/ajout-de-dependaces-natives-so/?page=1#p114807<p>Hello Bermudes,</p>
<p>Je viens essayer de t'aider un peu avec ma maigre expérience de Maven et de LWJGL. As-tu essayé de lancer un autre jeu (un jar fait avec slick2D) qui n'est pas de ton cru afin de voir si le problème vient de ton projet ou plutôt du java installé sur ton PC ?</p>
<p>Par contre la tendance va quand même plutôt vers <strong>gradle</strong> (que j'utilise chaque jour sur mes projets Android et que je trouve très bien foutu). Et la tendance niveau 2D engine en Java va plutôt vers <strong>libGDX</strong> (que j'ai pas mal utilisé et qui a fait ses preuves). Pourquoi tu n'y jetterai pas un coup d'oeil, quitte à apprendre un 2D engine, autant mettre la tête dans un truc maintenu et à jour et avec une grosse communauté, car il me semble que slick2d n'est plus maintenu et que sa communauté doit être de moins en moins grande.</p>Ajout de dépendaces natives (*.so), message #1145222016-06-17T18:42:05+02:00Bermudes/@Bermudeshttps://zestedesavoir.com/forums/sujet/6281/ajout-de-dependaces-natives-so/?page=1#p114522<p>Je m'en reviens quérir vos avis si vous en avez. <img alt=":)" src="/static/smileys/smile.png"></p>Ajout de dépendaces natives (*.so), message #1139162016-06-13T17:46:50+02:00Bermudes/@Bermudeshttps://zestedesavoir.com/forums/sujet/6281/ajout-de-dependaces-natives-so/?page=1#p113916<p>Re-sault à tous !</p>
<p>J'ai finalement - après un bon recoupement de liens ! - réussi à gérer la compilation avec maven afin qu'il me fasse un beau jar de derrière les fagots. Et <em>liblwjgl.so</em> est bien trouvé. Cependant, maintenant, en lanceant le jar, cil y a java qui gueule en me disant que liblwjgl.so n'arrive pas à trouver le fichier libmawt.so. Or en tapant <code>apt-file search libmawt.so</code>, j'obtiens le résultat suivant :</p>
<table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre>1
2
3
4
5
6
7
8</pre></div></td><td class="code"><div class="codehilite"><pre><span></span>openjdk-6-dbg: /usr/lib/debug/usr/lib/jvm/java-6-openjdk-i386/jre/lib/i386/headless/libmawt.so
openjdk-6-dbg: /usr/lib/debug/usr/lib/jvm/java-6-openjdk-i386/jre/lib/i386/xawt/libmawt.so
openjdk-6-jre: /usr/lib/jvm/java-6-openjdk-i386/jre/lib/i386/xawt/libmawt.so
openjdk-6-jre-headless: /usr/lib/jvm/java-6-openjdk-i386/jre/lib/i386/headless/libmawt.so
openjdk-7-dbg: /usr/lib/debug/usr/lib/jvm/java-7-openjdk-i386/jre/lib/i386/headless/libmawt.so
openjdk-7-dbg: /usr/lib/debug/usr/lib/jvm/java-7-openjdk-i386/jre/lib/i386/xawt/libmawt.so
openjdk-7-jre: /usr/lib/jvm/java-7-openjdk-i386/jre/lib/i386/xawt/libmawt.so
openjdk-7-jre-headless: /usr/lib/jvm/java-7-openjdk-i386/jre/lib/i386/headless/libmawt.so
</pre></div>
</td></tr></table>
<p>Donc le ficher existe et est à un endroit tout à fait standard pour une lib java (selon toute vraisemblance). Quelqu'un a une idée ?</p>Ajout de dépendaces natives (*.so), message #1138612016-06-13T12:33:37+02:00Nutr1z (Bl@dE)/@Nutr1z%20%28Bl%40dE%29https://zestedesavoir.com/forums/sujet/6281/ajout-de-dependaces-natives-so/?page=1#p113861<p>Hello,</p>
<p>Je pense que tu trouveras ta réponse <a href="https://lwjglgamedev.gitbooks.io/3d-game-development-with-lwjgl/content/chapter1/chapter1.html">ICI</a></p>Ajout de dépendaces natives (*.so), message #1138602016-06-13T12:04:52+02:00Bermudes/@Bermudeshttps://zestedesavoir.com/forums/sujet/6281/ajout-de-dependaces-natives-so/?page=1#p113860<p>Salut firm1, j'ai ajouté lwjgl directement dans les dépendances, je peux voir via eclipse que les <em>natives</em> sont bien dans les dépendances également, mais j'ai toujours la même erreur disant <em>no lwjgl in java.library.path</em>.</p>Ajout de dépendaces natives (*.so), message #1138482016-06-13T11:00:20+02:00firm1/@firm1https://zestedesavoir.com/forums/sujet/6281/ajout-de-dependaces-natives-so/?page=1#p113848<p>De ce que je vois, on dirait qu'il faut installer les dépendances LWJGL à coté. notamment via une dépendance : </p>
<table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre>1
2
3
4
5</pre></div></td><td class="code"><div class="codehilite"><pre><span></span> <span class="nt"><dependency></span>
<span class="nt"><groupId></span>org.lwjgl.lwjgl<span class="nt"></groupId></span>
<span class="nt"><artifactId></span>lwjgl<span class="nt"></artifactId></span>
<span class="nt"><version></span>2.8.2<span class="nt"></version></span>
<span class="nt"></dependency></span>
</pre></div>
</td></tr></table>Ajout de dépendaces natives (*.so), message #1136452016-06-10T19:34:48+02:00Bermudes/@Bermudeshttps://zestedesavoir.com/forums/sujet/6281/ajout-de-dependaces-natives-so/?page=1#p113645<p>Je n'ai jusqu'à présent pas lancé le projet <em>à la main</em>, je me suis fié à eclipse.</p>Ajout de dépendaces natives (*.so), message #1136102016-06-10T16:08:28+02:00Clems/@Clemshttps://zestedesavoir.com/forums/sujet/6281/ajout-de-dependaces-natives-so/?page=1#p113610<p>Le problème est probablement au lancement de l'application, pas au niveau du packaging. Comment démarres tu ton application ? Est-ce que tu spécifies le classpath ?</p>Ajout de dépendaces natives (*.so), message #1135692016-06-10T10:25:31+02:00Bermudes/@Bermudeshttps://zestedesavoir.com/forums/sujet/6281/ajout-de-dependaces-natives-so/?page=1#p113569<p>Salut à tous !</p>
<p>Je tente actuellement de faire mes armes en Java et de m'habituer aux gestionnaires de dépendances. J'ai choisi (assez arbitrairement)<sup id="fnref-arbitrairement"><a class="footnote-ref" href="#fn-arbitrairement">1</a></sup> Maven.</p>
<p>J'ai donc débuté un petit projet utilisant slick2d (et par transitivité jlwjgl). En configurant la compilation en entier dans eclipse (donc sans passer par Maven), j'arrive à le compiler et à le lancer sans souci. Par Maven cependant, les dépendances directes à slick2d sont bien prises en compte, mais en lançant le projet, j'ai l'erreur suivante : <code>no jlwjgl in java.library.path</code>. Cette erreur vient du fait que les libs natives (au format *.so et dont je dispose) ne sont pas prises en compte.</p>
<p>Ma question est donc <em>comment ajouter ces dépendances natives au projet Maven ?</em></p>
<p>Je suis sur Linux Mint 17 en 32-bits, j'utilise java 7 (OpenJDK) et j'utilise eclipse Mars (donc 4.5.2) avec le plugin m2eclipse.</p>
<p>Voici mon fichier <code>pom.xml</code> :</p>
<table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre> 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37</pre></div></td><td class="code"><div class="codehilite"><pre><span></span><span class="nt"><project</span> <span class="na">xmlns=</span><span class="s">"http://maven.apache.org/POM/4.0.0"</span> <span class="na">xmlns:xsi=</span><span class="s">"http://www.w3.org/2001/XMLSchema-instance"</span>
<span class="na">xsi:schemaLocation=</span><span class="s">"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"</span><span class="nt">></span>
<span class="nt"><modelVersion></span>4.0.0<span class="nt"></modelVersion></span>
<span class="nt"><groupId></span>RobinPetit<span class="nt"></groupId></span>
<span class="nt"><artifactId></span>JDungeon<span class="nt"></artifactId></span>
<span class="nt"><version></span>0.0.1-SNAPSHOT<span class="nt"></version></span>
<span class="nt"><packaging></span>jar<span class="nt"></packaging></span>
<span class="nt"><name></span>JDungeon<span class="nt"></name></span>
<span class="nt"><url></span>http://maven.apache.org<span class="nt"></url></span>
<span class="nt"><properties></span>
<span class="nt"><project.build.sourceEncoding></span>UTF-8<span class="nt"></project.build.sourceEncoding></span>
<span class="nt"></properties></span>
<span class="nt"><dependencies></span>
<span class="nt"><dependency></span>
<span class="nt"><groupId></span>junit<span class="nt"></groupId></span>
<span class="nt"><artifactId></span>junit<span class="nt"></artifactId></span>
<span class="nt"><version></span>3.8.1<span class="nt"></version></span>
<span class="nt"><scope></span>test<span class="nt"></scope></span>
<span class="nt"></dependency></span>
<span class="nt"><dependency></span>
<span class="nt"><groupId></span>org.slick2d<span class="nt"></groupId></span>
<span class="nt"><artifactId></span>slick2d-core<span class="nt"></artifactId></span>
<span class="nt"><version></span>1.0.1<span class="nt"></version></span>
<span class="nt"></dependency></span>
<span class="nt"><dependency></span>
<span class="nt"><groupId></span>javax.jnlp<span class="nt"></groupId></span>
<span class="nt"><artifactId></span>jnlp-api<span class="nt"></artifactId></span>
<span class="nt"><version></span>7.0<span class="nt"></version></span>
<span class="nt"><scope></span>system<span class="nt"></scope></span>
<span class="nt"><systemPath></span>/usr/share/icedtea-web/netx.jar<span class="nt"></systemPath></span>
<span class="nt"></dependency></span>
<span class="nt"></dependencies></span>
<span class="nt"></project></span>
</pre></div>
</td></tr></table>
<p>Merci d'avance à tous ceux qui pourront m'aider !</p>
<div class="footnote">
<hr>
<ol>
<li id="fn-arbitrairement">
<p>J'ai surtout d'abord tenté Gradle que j'ai été incapable de faire fonctionner : <code>gradle</code> provoquait un gros <em>freeze</em> malgré les 3 version différentes que j'ai tenté d'installer donc j'ai tenté Maven. <a class="footnote-backref" href="#fnref-arbitrairement" title="Retourner au texte de la note 1">↩</a></p>
</li>
</ol>
</div>Solution légère de déploiement de dépôt Maven via Jenkins, message #875982015-11-23T22:26:59+01:00Amaury/@Amauryhttps://zestedesavoir.com/forums/sujet/4506/solution-legere-de-deploiement-de-depot-maven-via-jenkins/?page=1#p87598<p>Bon, avec ce message et quelques discussions avec d'autres personnes je suis malgré tout passé vers un système complet, en l'occurrence Artifactory. Je l'ai préféré à Nexus pour les seules raisons que je le connaissais déjà en tant qu'utilisateur, et qu'il s'intègre très facilement avec Jenkins que j'utilisais déjà.</p>
<p>Merci pour l'avis <img alt=":)" src="/static/smileys/smile.png"> .</p>