IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Maven Java Discussion :

Insertion d'un assembly créant un setup.exe dans le cycle de vie maven


Sujet :

Maven Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 5
    Par défaut Insertion d'un assembly créant un setup.exe dans le cycle de vie maven
    J'ai un projet maven qui comporte 2 modules ("monProjet" et "monProjet-Intégration-tests").
    J'ai tenté (en vain) de faire la chose suivante:

    Au lieu de jouer les tests (d'intégration) directement sur monProjet.jar (créé d'après la commande "mvn clean install"), je tente d'insérer les étapes suivantes dans le POM de mon projet:

    1) Empaqueter monProjet.jar dans un fichier d'installation (monProjetSetup.exe par exemple)
    2) Installer monProjet.jar en exécutant monProjetSetup.exe. (de préférence dans mon repository local)
    3) Exécuter les tests (depuis le module "monProjet-Intégration-tests") sur monProjet.jar issu du setup

    La 1ère étape ci-dessus fonctionne grâce à l'implémentation d'une version modifée du plugin assembly.
    La 3ème étape est classique et ne pose pas de problème particulier (tant qu'un "monProjet.jar" se trouve au bon endroit).

    C'est la 2ème étape qui pose problème. En fait elle est purement et simplement ignoré, du fait, à mon avis de l'invocation du plugin deploy en dehors du cycle de vie Maven.

    Quelqu'un aurait-il une idée sur la manière de procéder pour que les étapes 1 et 2 que je viens de décrire s'exécutent à la suite d'une seule commande "mvn clean install"?

    Merci d'avance


    *** Extrait du POM de monProjet ***

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    <project>
      <modelVersion>4.0.0</modelVersion>
      <groupId>myGroup</groupId>
      <artifactId>myArtifact</artifactId>
      <packaging>jar</packaging>
      <name>myProject</name>
        <version>2.0-SNAPSHOT</version>
      <build>
        <plugins>
          <!-- plugin customAssembly: create an setup exe file from the generated jar file and all its dependencies -->
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-customAssembly-plugin</artifactId>
            <configuration>
              <installerCompilerPath>
                C:/Program Files/Inno-Setup-5/ISCC.exe
              </installerCompilerPath>
              <installerScriptTemplate>
                src/assembly/scriptIIS.vm
              </installerScriptTemplate>
              <installerScriptTemplateProperties>
                <myKey>myValue</myKey>
              </installerScriptTemplateProperties>
              <descriptor>src/assembly/src.xml</descriptor>
              <finalName>${project.name}</finalName>
              <outputDirectory>
                ${project.build.directory}
              </outputDirectory>
            </configuration>
            <executions>
              <execution>
                <phase>install</phase>
                <goals>
                  <goal>customAssembly</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
          <!-- plugin exec: execute the setup in silent mode -->
          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <executions>
              <execution>
                <phase>install</phase>
                <goals>
                  <goal>exec</goal>
                </goals>
              </execution>
            </executions>
            <configuration>
              <executable>${project.name}.exe</executable>
              <workingDirectory>
                ${project.build.directory}\installer
              </workingDirectory>
              <arguments>
                <argument>/VERYSILENT</argument>
                <argument>
                  /DIR=${project.build.directory}\installer\temp"
                </argument>
              </arguments>
            </configuration>
          </plugin>
          <!-- plugin deploy: this stage is never performed. I think because it is out of the lifecycle? How to do? -->
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-deploy-plugin</artifactId>
            <executions>
              <execution>
                <phase>deploy</phase>
                <goals>
                  <goal>deploy-file</goal>
                </goals>
              </execution>
            </executions>
            <configuration>
              <url>file://${localRepository}\myProject-exe</url>
              <file>${project.build.directory}\installer\${project.name}.exe</file>
              <version>${project.version}</version>
              <groupId>myGroup</groupId>
              <artifactId>myProject-exe</artifactId>
              <packaging>jar</packaging>
            </configuration>
          </plugin>      
        </plugins>
      </build>
    </project>

  2. #2
    Membre chevronné

    Inscrit en
    Septembre 2006
    Messages
    466
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 466
    Par défaut
    Je ne suis pas sûr de bien comprendre ce que tu veux exactement mais je ne pense pas que ce soit une bonne chose de ne pas laisser maven installer ton jar dans ton repo locale pour toi. Si tu fais mvn clean install, maven ne te l'installe pas ?

    Néanmoins, c'est normal que le plugin maven-deploy-plugin ne soit pas appelé car il est attaché à la phase deploy qui n'est pas appelée lorsque tu fais mvn install (cf. lifecycle).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
          <!-- plugin deploy: this stage is never performed. I think because it is out of the lifecycle? How to do? -->
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-deploy-plugin</artifactId>
            <executions>
              <execution>
                <phase>deploy</phase>
                <goals>
                  <goal>deploy-file</goal>
                </goals>
              </execution>
            </executions>

  3. #3
    Futur Membre du Club
    Inscrit en
    Février 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 5
    Par défaut
    Merci rseM2 pour ta réponse.

    En fait, mon souci est de livrer à mes utilisateurs un .exe d'installation (via un wizard) plutôt qu'un jar. Outre le jar produit par Maven (d'après clean install), cet exe contiendrait entre autre, un .bat de lancement qui sera automatiquement accessible via le menu démarrer de windows.

    Pour créer ce wizard j'utilise l'outil inno setup via une version modifiée du plugin assembly qui me crée donc un setup.exe.

    La contrainte à laquelle je suis soumis, c'est, qu'avant de jouer mes tests, je dois exécuter mon wizard, ce que permet le plugin maven-exec (en mode silencieux), ce qui a pour effet d'installer mon .jar initial.

    C'est finalement sur ce jar que vais jouer mes tests. le but de la manoeuvre étant (en partie) de vérifier que le jar n'a pas subi d'altération en passant par inno setup.

    La stratégie que j'ai adopté depuis hier, c'est de répartir les opérations dans les POM de "monProjet" et "monProjet-integration-tests".

    Dans un 1er temps, je crée et installe le setup.exe dans le repository local, par un mvn clean install sur "monProjet". Cette partie fonctionne en modifiant un peu le code de mon plugin customAssembly.

    Ensuite, je tente (en ce moment), d'effectuer la suite des opérations via le POM de "monProjet-integration-tests"

    En définitive, je souhaiterais pouvoir
    1) lancer le plugin exec qui installerais mon jar (par exemple dans monProjet-integration-tests\target\)
    2) copier le jar (quel moyen? Puisque deploy à ce stade n'est pas opportun?) dans mon repository local
    3) donner la main au plugin surfire

    Suis-je en train de me fourvoyer?

    Merci encore

  4. #4
    Membre chevronné

    Inscrit en
    Septembre 2006
    Messages
    466
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 466
    Par défaut
    Bonjour mtheo,

    Citation Envoyé par mtheo
    En fait, mon souci est de livrer à mes utilisateurs un .exe d'installation (via un wizard) plutôt qu'un jar. Outre le jar produit par Maven (d'après clean install), cet exe contiendrait entre autre, un .bat de lancement qui sera automatiquement accessible via le menu démarrer de windows.

    Pour créer ce wizard j'utilise l'outil inno setup via une version modifiée du plugin assembly qui me crée donc un setup.exe.

    La contrainte à laquelle je suis soumis, c'est, qu'avant de jouer mes tests, je dois exécuter mon wizard, ce que permet le plugin maven-exec (en mode silencieux), ce qui a pour effet d'installer mon .jar initial.
    Ok, maintenant c'est plus claire.

    Citation Envoyé par mtheo
    C'est finalement sur ce jar que vais jouer mes tests. le but de la manoeuvre étant (en partie) de vérifier que le jar n'a pas subi d'altération en passant par inno setup.
    En fait ton réel problème est de t'assurer que ton jar n'a pas été modifié par le programme inno setup.

    Du coup, pour faire plus simple, j'opterai pour une autre stratégie :
    • j'utiliserai maven 2 normalement pour faire ton install et tes tests d'intégration pour t'assurer que ton jar est bon ;
    • je vérifierai ensuite que mon jar n'est pas modifié par inno setup. Pour cela, tu peux utiliser un programme qui vérifie que les fichiers sont identiques. On peut sans doute se dire que si inno setup ne modifie pas ton jar, il ne le fera pas ensuite (dans ce cas il suffit de le faire qu'une fois). Si tu veux être plus sûr, tu peux essayer d'automatiser la comparaison à travers un outil en java ou qu'on peut lancer via une ligne de commande. Tu peux aussi voir si tu ne peux faire une classe java pour cela (comparer la taille des fichiers et/ou un md5 devrait suffire) et faire un test unitaire pour lancer la comparaison.


    Rémy

  5. #5
    Futur Membre du Club
    Inscrit en
    Février 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 5
    Par défaut
    Un peu occupé à autre chose en ce moment. Je reviendrais probablement demain

    Merci

  6. #6
    Futur Membre du Club
    Inscrit en
    Février 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 5
    Par défaut
    Bonjour,

    J'ai résolu en partie mon problème:
    1) En faisant mvn clean install sur "monProjet", maven m'installe outre le jar généré, le fichier le setup.exe (issu d'inno setup). Cela a été posible en utilisant la méthode attachArtifact (du package "org.apache.maven.project.MavenProject") dans le code de mon plugin customAssembly.

    2) Grâce au "maven-dependency-plugin" dans le POM de "monProjet-integration-tests", je peux copier le setup.exe depuis le repository vers monProjet-integration-tests\target\. De là, je peux, via le plugin exec exécuter le setup qui m'installe le jar dans un sous-répertoire de target (monProjet-integration-tests\target\temp\monProjet-1.0-SNAPSHOT.jar).

    Le problème qui se pose maintenant, c'est que pour jouer mes tests depuis cet emplacement, je dois spécifier un scope "system" et un systemPath qui manifestement, prend impérativement un chemin complet en dur (ce qui n'est pas satisfaisant).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <dependency>
      <groupId>myGroup</groupId>
      <artifactId>myDepArtifact</artifactId>
      <scope>system</scope>
      <systemPath>D:\chemin\${project.build.directory}\temp\monProjet-${project.version}.jar</systemPath>
      <version>${project.version}</version>
    </dependency>
    De plus j'ai d'autres jar au même emplacement, qui doivent enrichir mon classpath.

    J'ai tenté de résoudre le dernier point en créant un plugin qui doit copier les jars dans le classpath, mais je ne trouve pas de méthode dans le genre addElementToClassPath() dans le package org.apache.maven.project.MavenProject.

    Bref. Je tâtonne...

  7. #7
    Futur Membre du Club
    Inscrit en
    Février 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 5
    Par défaut
    Bonjour,
    J'étais en train de réinventer la poudre en ce qui concerne un plugin qui doit copier les jars dans le classpath. En effet le plugin "maven-jar-plugin" permet déjà de définir un classpath dans le "manifest.mf" de l'application.
    Mon problème est à peu près résolu.
    Ce qui n'est (toujours) pas satisfaisant, c'est la définition du SystemPath en dur.

    Théo

Discussions similaires

  1. Intégrer un exe dans un setup
    Par thomas.sculfort dans le forum Windows
    Réponses: 1
    Dernier message: 07/03/2007, 17h01
  2. probleme de creation de setup.exe de mon application.
    Par kerkennah dans le forum Windows Forms
    Réponses: 1
    Dernier message: 09/02/2007, 17h48
  3. [vb.net]déploiement via setup.exe
    Par Golzinne dans le forum Windows Forms
    Réponses: 2
    Dernier message: 09/01/2007, 17h13
  4. Réponses: 2
    Dernier message: 04/01/2007, 17h55
  5. Création du fichier setup.exe
    Par lishou dans le forum Runtime
    Réponses: 1
    Dernier message: 20/10/2005, 15h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo