<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://air.imag.fr/index.php?action=history&amp;feed=atom&amp;title=VT2016_Gradle</id>
	<title>VT2016 Gradle - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://air.imag.fr/index.php?action=history&amp;feed=atom&amp;title=VT2016_Gradle"/>
	<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=VT2016_Gradle&amp;action=history"/>
	<updated>2026-06-12T15:03:57Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.17</generator>
	<entry>
		<id>https://air.imag.fr/index.php?title=VT2016_Gradle&amp;diff=30541&amp;oldid=prev</id>
		<title>Remi.Gattaz at 21:34, 29 September 2016</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=VT2016_Gradle&amp;diff=30541&amp;oldid=prev"/>
		<updated>2016-09-29T21:34:22Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 21:34, 29 September 2016&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 4:&lt;/td&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 4:&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Enseignants : Didier Donsez, Georges-Pierre Bonneau&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Enseignants : Didier Donsez, Georges-Pierre Bonneau&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Date : 30/09/2016&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Date : 30/09/2016&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-empty diff-side-deleted&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-empty diff-side-deleted&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[File:VT2016_Gradle.png]]&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=Résumé=&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=Résumé=&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Remi.Gattaz</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=VT2016_Gradle&amp;diff=30539&amp;oldid=prev</id>
		<title>Remi.Gattaz: Created page with &quot;=Présentation= * Sujet : Gradle et application à eCOM avec Docker Plugin * Auteur : Rémi GATTAZ * Enseignants : Didier Donsez, Georges-Pierre Bonneau * Date : 30/09/2016  =...&quot;</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=VT2016_Gradle&amp;diff=30539&amp;oldid=prev"/>
		<updated>2016-09-29T21:19:13Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;=Présentation= * Sujet : Gradle et application à eCOM avec Docker Plugin * Auteur : Rémi GATTAZ * Enseignants : Didier Donsez, Georges-Pierre Bonneau * Date : 30/09/2016  =...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;=Présentation=&lt;br /&gt;
* Sujet : Gradle et application à eCOM avec Docker Plugin&lt;br /&gt;
* Auteur : Rémi GATTAZ&lt;br /&gt;
* Enseignants : Didier Donsez, Georges-Pierre Bonneau&lt;br /&gt;
* Date : 30/09/2016&lt;br /&gt;
&lt;br /&gt;
=Résumé=&lt;br /&gt;
Gérer manuellement le cycle de vie d&amp;#039;une application se fait par la répétition d&amp;#039;actions simples. De ce constat, des logiciels appelés moteurs de productions ont été développés. Le premier d&amp;#039;entre eux était Make. Depuis, beaucoup d&amp;#039;autre ont vu le jour et notamment Gradle. Créé en 2007, il est aujourd&amp;#039;hui un des moteurs de production les plus populaires. Conçus pour allier le meilleur de deux alternatives très populaire, Graddle est aujourd&amp;#039;hui présenté comme un logiciel très complet pour gérer le cycle de vie d&amp;#039;un logiciel.&lt;br /&gt;
&lt;br /&gt;
* Mots-clés : Gradle, Moteur de production, cycle de vie&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Abstract=&lt;br /&gt;
Handling manually the life cycle of an application is done through the repetition of simple tasks. From that finding, build automation solution were designed. The first of them was Make. Since, many others were created and among them is Gradle. Created in 2007, it has become one of the most used build automation solution. Gradle was desgined to bring the best of two of very popular alternatives while removing their issues, Gradle is considered to be a good solution to handle the life cycle of a software.&lt;br /&gt;
&lt;br /&gt;
* Keywords : Gradle, build automation, life cycle&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Synthèse=&lt;br /&gt;
&lt;br /&gt;
==Moteurs de production==&lt;br /&gt;
Les moteurs de production sont des logiciels dont le but est principalement d&amp;#039;automatiser la gestion d&amp;#039;un développement logiciel. La compilation, la création de documentation, la gestion de tests automatisés ou encore la publication de livrables sont les actions les plus classiques qui peuvent généralement être automatisées avec ces logiciels. Leurs utilisations permet donc de faciliter le lancement de ces tâches et ainsi d&amp;#039;augmenter la productivité.&lt;br /&gt;
&lt;br /&gt;
Il existe beaucoup de moteur de production. Les plus connus sont les suivants :&lt;br /&gt;
* Apache Ant&lt;br /&gt;
* Apache Maven&lt;br /&gt;
* CMake&lt;br /&gt;
* GNU Make&lt;br /&gt;
* Gradle&lt;br /&gt;
* NMake&lt;br /&gt;
* SCons&lt;br /&gt;
* Waf&lt;br /&gt;
&lt;br /&gt;
Les actions ou tâches qui vont être possible d&amp;#039;effectuer et les langages de développement supportés vont varier selon les moteurs de production.&lt;br /&gt;
&lt;br /&gt;
La configuration de ces actions passe toujours par la modification de fichier de configuration. La syntaxe de ces fichiers va elle aussi changer selon l&amp;#039;outil utilisé. Parmis les modèles les plus répandus se trouvent les fichiers xml et Yaml.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;project name=&amp;quot;MyProject&amp;quot; default=&amp;quot;dist&amp;quot; basedir=&amp;quot;.&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;&lt;br /&gt;
            simple example build file&lt;br /&gt;
        &amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;!-- set global properties for this build --&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;src&amp;quot; location=&amp;quot;src&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;build&amp;quot; location=&amp;quot;build&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;dist&amp;quot; location=&amp;quot;dist&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;target name=&amp;quot;init&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;!-- Create the time stamp --&amp;gt;&lt;br /&gt;
            &amp;lt;tstamp/&amp;gt;&lt;br /&gt;
            &amp;lt;!-- Create the build directory structure used by compile --&amp;gt;&lt;br /&gt;
            &amp;lt;mkdir dir=&amp;quot;${build}&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/target&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;target name=&amp;quot;compile&amp;quot; depends=&amp;quot;init&amp;quot;&lt;br /&gt;
            description=&amp;quot;compile the source&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;!-- Compile the java code from ${src} into ${build} --&amp;gt;&lt;br /&gt;
            &amp;lt;javac srcdir=&amp;quot;${src}&amp;quot; destdir=&amp;quot;${build}&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/target&amp;gt;&lt;br /&gt;
        &amp;lt;target name=&amp;quot;dist&amp;quot; depends=&amp;quot;compile&amp;quot;&lt;br /&gt;
            description=&amp;quot;generate the distribution&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;!-- Create the distribution directory --&amp;gt;&lt;br /&gt;
            &amp;lt;mkdir dir=&amp;quot;${dist}/lib&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;!-- Put everything in ${build} into the MyProject-${DSTAMP}.jar file --&amp;gt;&lt;br /&gt;
            &amp;lt;jar jarfile=&amp;quot;${dist}/lib/MyProject-${DSTAMP}.jar&amp;quot; basedir=&amp;quot;${build}&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/target&amp;gt;&lt;br /&gt;
        &amp;lt;target name=&amp;quot;clean&amp;quot;&lt;br /&gt;
            description=&amp;quot;clean up&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;!-- Delete the ${build} and ${dist} directory trees --&amp;gt;&lt;br /&gt;
            &amp;lt;delete dir=&amp;quot;${build}&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;delete dir=&amp;quot;${dist}&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/target&amp;gt;&lt;br /&gt;
    &amp;lt;/project&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Configuration exemple du moteur Apache Ant tirée du [https://ant.apache.org/manual/using.html manuel officiel]&lt;br /&gt;
&lt;br /&gt;
==Gradle==&lt;br /&gt;
Gradle est un moteur de production crée en 2007 qui se base sur les concepts de Apache Ant et Apache Maven, deux autres moteurs de production. Le projet est née pour apporter la création d&amp;#039;un outil alliant les avantages de ces deux outils tout en essayant de retirer les défauts.&lt;br /&gt;
&lt;br /&gt;
Pour cette raison, Gradle dispose tout comme Maven d&amp;#039;un gestionnaire de dépendance intégré et du concept de [https://fr.wikipedia.org/wiki/Convention_plut%C3%B4t_que_configuration convention plutôt que configuration] permettant d&amp;#039;obtenir des fichiers de configurations léger. Aussi, Gradle dispose tout comme Apache Ant d&amp;#039;une très forte flexibilité au niveau de l&amp;#039;écriture du fichier de configuration. En revanche, contrairement à Maven et Apache Ant qui utilisent des fichiers de configuration XML dont la structure peut rapidement devenir importante, Gradle utilise des fichiers de configurations dans un langage s&amp;#039;apparentant à Groovy. L&amp;#039;utilisation de ce langage permet de rendre les fichiers de configurations beaucoup moins verbeux et ainsi beaucoup plus clair.&lt;br /&gt;
&lt;br /&gt;
A sa première version, sortie en 2012, le logiciel était uniquement capable de gérer des projets Java, Scala et Groovy et se basait très fortement sur Apache Ant et Maven pour fonctionner. Aujourd&amp;#039;hui en version 3.1, beaucoup des fonctionnalités qui provenaient de Ant et Maven sont maintenant dans le coeur de Gradle. Et puisque le moteur de production a été conçu avec la notion de plugin, il a été très fortement étendue et il peut donc être utilisé pour pratiquement n&amp;#039;importe quel type de projet. Les plugins officiels et de la communauté permettent à Gradle de supporter plus de 60 langages et augmentent très fortement ses capacités.&lt;br /&gt;
&lt;br /&gt;
===Le fichier build.gradle===&lt;br /&gt;
Le fichier build.gradle est l&amp;#039;emplacement principal de la configuration des tâche Gradle. Une tâche gradle étant ce qui est effectué lorsque Gradle est exécuté.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Exemple:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Exemple d&amp;#039;un fichier build.gradle minimaliste&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;groovy&amp;quot;&amp;gt;&lt;br /&gt;
    apply plugin: &amp;quot;java&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    /* block could be removed since sources in src/main is standard configuration */&lt;br /&gt;
    sourceSets {&lt;br /&gt;
        main.java.srcDirs &amp;quot;src/main&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    jar{&lt;br /&gt;
        manifest.attributes (&lt;br /&gt;
            &amp;quot;Main-class&amp;quot; : &amp;quot;air.vts.simple.HelloWorld&amp;quot;,&lt;br /&gt;
        )&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cet exemple est très simple et est tiré d&amp;#039;un projet java avec seulement quelques fichiers qu&amp;#039;il faut mettre dans un jar qu&amp;#039;on rend exécutable en spécifiant le point d&amp;#039;entrée du programme dans le fichier manifest du jar.&lt;br /&gt;
&lt;br /&gt;
Les blocs présent dans l&amp;#039;exemple ne sont pas des tâches. Il s&amp;#039;agit de configurations. Une tâche est décrite selon la syntaxe suivante :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;groovy&amp;quot;&amp;gt;&lt;br /&gt;
    task nameOfTaks(type: TYPE) {&lt;br /&gt;
        /* Content of Task */&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans l&amp;#039;exemple, même si aucune tâche n&amp;#039;est spécifié dans ce fichier, les tâches &amp;#039;build&amp;#039;, &amp;#039;javadoc&amp;#039;, &amp;#039;jar&amp;#039; sont disponibles puisqu&amp;#039;elle proviennent du plugin java.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ses forces===&lt;br /&gt;
* La plus grande force de Gradle provient de son extensibilité. Puisqu&amp;#039;il est basé sur un principe de plugin, la communauté peut proposer ses plugins et les publier sur le site de Gradle afin de les partager. Le nombre de plugins existant n&amp;#039;est pas communiqué mais est important.&amp;lt;br&amp;gt; https://plugins.gradle.org/&lt;br /&gt;
&lt;br /&gt;
* Sa documentation est également très fourni et contient beaucoup d&amp;#039;exemple permettant de comprendre l&amp;#039;outil facilement et ainsi prendre rapidement en main le logiciel.&amp;lt;br&amp;gt;&lt;br /&gt;
https://docs.gradle.org/current/userguide/userguide.html&lt;br /&gt;
&lt;br /&gt;
* Selon des tests effectués par Revel Labs en janvier 2014, les performances générales de Gradle sont supérieure à Apache Ant et Maven.&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.slideshare.net/ZeroTurnaround/java-build-tools-part-2-a-decision-makers-guide&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Gradle et docker==&lt;br /&gt;
Parmi les plugins de Gradle créés et diffusés par la communauté, il existe des plugins pour gérer des images et conteneurs docker. Parmi ceux ci se trouve notamment &amp;#039;&amp;#039;docker-remote-api&amp;#039;&amp;#039;, un plugin se trouvant dans le pack [gradle-docker-plugin https://github.com/bmuschko/gradle-docker-plugin].&lt;br /&gt;
&lt;br /&gt;
Ce plugin a été conçu pour permettre la gestion de conteneurs et d&amp;#039;images docker depuis Graddle. Ainsi, avec ce plugin, il est possible de créer des images et de les exécuter pour obtenir des environnement de développement, de tests et production. Utiliser ce plugin permet ainsi de contrôler les environnements utilisés et ainsi permettre leurs harmonisations pour que les environnements finaux (de production) soit les plus proches possibles de ceux de test et de developpement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Gradle, docker et le projet eCOM==&lt;br /&gt;
Dans le cadre du projet eCOM, il est imposé de créer une application Java EE qu&amp;#039;il faut packager dans un fichier .ear qui doit être publié sur un serveur compatible tel que GlassFish ou WildFly.&lt;br /&gt;
&lt;br /&gt;
Pour suivre cette consigne, il est possible de générer un fichier .ear puis de manuellement le déployer sur un serveur. Il est également possible de le publier directement avec Gradle en précisant dans le fichier de build.gradle l&amp;#039;adresse du serveur et les identifiants nécessaire.&lt;br /&gt;
&lt;br /&gt;
Une dernière solution, qui va être détaillé ici, est d&amp;#039;utiliser docker avec Gradle afin de produire une image Docker contenant l&amp;#039;application complète. C&amp;#039;est à dire le serveur d&amp;#039;application java et le fichier .ear qui est produit. Au cours du développement de cette application, il est alors possible d&amp;#039;utiliser cette image pour tester l&amp;#039;application eCOM et éventuellement la déployer en production.&lt;br /&gt;
&lt;br /&gt;
===Architecture===&lt;br /&gt;
Le plugin docker-remote-api qui va être utilisé pour construire l&amp;#039;image docker peut être utilisé avec un fichier Dockerfile ou en définissant dans le fichier build.gradle les éléments du fichier qui est alors généré dynamiquement.&lt;br /&gt;
&lt;br /&gt;
Pour faciliter ce cas d&amp;#039;utilisation et limiter le contenu du fichier build.gradle, nous allons créer un fichier Dockerfile et le placer dans le dossier &amp;#039;&amp;#039;docker&amp;#039;&amp;#039; situé à la racine du projet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===DockerFile===&lt;br /&gt;
La première chose à définir est le choix du serveur. Puisque l&amp;#039;image docker du serveur GlassFish est très mal supporté et qu&amp;#039;elle a été déprécié, l&amp;#039;utilisation de WildFly est préféré.&lt;br /&gt;
&lt;br /&gt;
La construction de l&amp;#039;image WildFly dans lequel un fichier .ear est déployé est simple puisqu&amp;#039;il suffit de déposer un fichier .ear dans le dossier /opt/jboss/wildfly/standalone/deployments/ de l&amp;#039;image. Le fichier Dockerfile faisant cette création est donc le suivant :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    #&lt;br /&gt;
    # Super simple Dockerfile to deploy wildfly&lt;br /&gt;
    #&lt;br /&gt;
    FROM jboss/wildfly:10.1.0.Final&lt;br /&gt;
&lt;br /&gt;
    MAINTAINER Rémi GATTAZ &amp;quot;remi.gattaz@gmail.com&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    ADD myApp.ear /opt/jboss/wildfly/standalone/deployments/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Notons toutefois qu&amp;#039;il faut avoir accès au fichier .ear dans le dossier Docker&lt;br /&gt;
&lt;br /&gt;
===Ajout de la configuration gradle===&lt;br /&gt;
Voici la configuration nécessaire à mettre en place pour construire l&amp;#039;image docker.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;groovy&amp;quot;&amp;gt;&lt;br /&gt;
    /* DOCKER PLUGIN */&lt;br /&gt;
    /* Add docker plugin as dependency */&lt;br /&gt;
    buildscript {&lt;br /&gt;
        repositories {&lt;br /&gt;
            jcenter()&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        dependencies {&lt;br /&gt;
            classpath &amp;#039;com.bmuschko:gradle-docker-plugin:3.0.3&amp;#039;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* Apply docker plugin */&lt;br /&gt;
    apply plugin: &amp;#039;com.bmuschko.docker-remote-api&amp;#039;&lt;br /&gt;
    repositories {&lt;br /&gt;
        mavenCentral()&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* docker configuration (for docker-machine only) */&lt;br /&gt;
    docker {&lt;br /&gt;
        url = System.env.DOCKER_HOST&lt;br /&gt;
        certPath = new File(System.env.DOCKER_CERT_PATH)&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* Copy build res in docker folder */&lt;br /&gt;
    import org.gradle.api.tasks.Copy&lt;br /&gt;
    task copyBuildRes(type: Copy) {&lt;br /&gt;
        from &amp;#039;build/libs/myApp.ear&amp;#039;&lt;br /&gt;
        into &amp;#039;docker/myApp.ear&amp;#039;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* buildImage task */&lt;br /&gt;
    import com.bmuschko.gradle.docker.tasks.image.DockerBuildImage&lt;br /&gt;
    task buildImage(type: DockerBuildImage) {&lt;br /&gt;
        dependsOn build&lt;br /&gt;
        dependsOn copyBuildRes&lt;br /&gt;
&lt;br /&gt;
        tag = &amp;#039;my-container&amp;#039;&lt;br /&gt;
        /* By default, uses the Dockerfile in the folder docker */&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La tâche &amp;#039;&amp;#039;copyBuildRes&amp;#039;&amp;#039; permet de copier le fichier myApp.ear construit par Graddle dans le dossier docker. Ainsi, le fichier Dockerfile aura accès à l&amp;#039;ear.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Build===&lt;br /&gt;
Une fois ces fichiers mis en place, la tâche &amp;#039;&amp;#039;buildImage&amp;#039;&amp;#039; permet de construire l&amp;#039;image Docker de l&amp;#039;application eCOM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Bibliographie=&lt;br /&gt;
* https://gradle.org/&lt;br /&gt;
* https://docs.gradle.org/current/userguide/ear_plugin.html&lt;br /&gt;
* https://github.com/gradle/gradle/tree/master/subprojects/docs/src/samples&lt;br /&gt;
* https://github.com/bmuschko/gradle-docker-plugin&lt;br /&gt;
* https://hub.docker.com/r/jboss/wildfly/&lt;/div&gt;</summary>
		<author><name>Remi.Gattaz</name></author>
	</entry>
</feed>