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 :

Compiler un projet Maven avec Maven


Sujet :

Maven Java

  1. #1
    Membre éprouvé
    Avatar de michel.di
    Homme Profil pro
    Freelance
    Inscrit en
    Juin 2009
    Messages
    782
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 782
    Points : 1 042
    Points
    1 042
    Par défaut Compiler un projet Maven avec Maven
    Bonjour à tous,
    J'aimeraisà partir de mon code Java de compiler avec Maven un projet qui est créé par mon code ( un projet Maven également ).
    J'ai auparavant essayé de faire un Runtime.getRuntime().exec() avec un mvn clean install mais ce n'est pas terrible.

    Connaissez-vous une solution pour faire ça?

    Merci d'avance

  2. #2
    Membre éprouvé

    Homme Profil pro
    Architecte technique
    Inscrit en
    Juin 2005
    Messages
    588
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2005
    Messages : 588
    Points : 1 230
    Points
    1 230
    Par défaut
    Citation Envoyé par michel.di Voir le message
    J'aimeraisà partir de mon code Java de compiler avec Maven un projet qui est créé par mon code ( un projet Maven également ).
    et en clair ?

    Citation Envoyé par michel.di Voir le message
    J'ai auparavant essayé de faire un Runtime.getRuntime().exec() avec un mvn clean install mais ce n'est pas terrible.

    Connaissez-vous une solution pour faire ça?
    écrire ton propre plugin en utilisant l'api maven... De mon côté, j'ai commencé à développer un plugin wizard qui, pour le génération de projet, lance automatiquement plusieurs archetypes ! Tu peux aussi regarder les sources de M2E et autres extensions Maven sur Github...

    Meilleurs voeux,
    Philippe

  3. #3
    Membre éprouvé
    Avatar de michel.di
    Homme Profil pro
    Freelance
    Inscrit en
    Juin 2009
    Messages
    782
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 782
    Points : 1 042
    Points
    1 042
    Par défaut
    Meilleurs voeux à toi également!
    En fait dans mon code je crée des projets Maven et je souhaite pouvoir les compiler toujours à partir du code.

    Il n'y a pas de plug-in existant pour faire ça?
    Je vais regarder du coté des extensions et du M2E

    Merci

  4. #4
    Membre éprouvé
    Avatar de michel.di
    Homme Profil pro
    Freelance
    Inscrit en
    Juin 2009
    Messages
    782
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 782
    Points : 1 042
    Points
    1 042
    Par défaut
    J'ai trouvé ça :
    https://github.com/TimMoore/mojo-executor

    Mais je ne sais pas comment m'en servir. Je ne comprends pas (ni ou le mettre, ni ce que je dois en faire) :
    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
     
    executeMojo(
        plugin(
            groupId("org.apache.maven.plugins"),
            artifactId("maven-dependency-plugin"),
            version("2.0")
        ),
        goal("copy-dependencies"),
        configuration(
            element(name("outputDirectory"), "${project.build.directory}/foo")
        ),
        executionEnvironment(
            project,
            session,
            pluginManager
        )
    );

  5. #5
    Rédacteur
    Avatar de lunatix
    Homme Profil pro
    Architecte technique
    Inscrit en
    Novembre 2002
    Messages
    1 960
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 960
    Points : 3 736
    Points
    3 736
    Par défaut
    je te conseille de regarder http://maven.apache.org/ref/3.0-beta-3/maven-embedder/

    mais ca doit pas etre simple

  6. #6
    Membre éprouvé

    Homme Profil pro
    Architecte technique
    Inscrit en
    Juin 2005
    Messages
    588
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2005
    Messages : 588
    Points : 1 230
    Points
    1 230
    Par défaut
    Citation Envoyé par michel.di Voir le message
    J'ai trouvé ça :
    https://github.com/TimMoore/mojo-executor

    Mais je ne sais pas comment m'en servir. Je ne comprends pas (ni ou le mettre, ni ce que je dois en faire) :...
    Il faut regarder l'exemple mojo-executor-maven-plugin
    Merci pour cette trouvaille... je ne connaissais pas et cela devrait moi aussi m'être utile

    De mon côté, actuellement, pour la création des projets, j'attaque directement l'API Maven (i.e. similaire à CreateProjectFromArchetypeMojo du plugin de base).

    Citation Envoyé par lunatix Voir le message
    Ainsi que les sources de M2E qui l'utilisent... Bon courage

  7. #7
    Membre éprouvé
    Avatar de michel.di
    Homme Profil pro
    Freelance
    Inscrit en
    Juin 2009
    Messages
    782
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 782
    Points : 1 042
    Points
    1 042
    Par défaut
    ça m'a l'air compliqué tout ça juste pour lancer une compilation avec Maven

  8. #8
    Membre éprouvé

    Homme Profil pro
    Architecte technique
    Inscrit en
    Juin 2005
    Messages
    588
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2005
    Messages : 588
    Points : 1 230
    Points
    1 230
    Par défaut
    Citation Envoyé par michel.di Voir le message
    ça m'a l'air compliqué tout ça juste pour lancer une compilation avec Maven
    Ben effectivement, si tu ne veux pas faire un M2E killer le mojo-executor est une des solutions les plus légères.

    si tu veux te lancer dans l'utilisation de l'API Maven, il faut repérer le mojo Maven qui s'occupe du build et le réécrire pour ton propre besoin : pour mon cas d'utilisation, j'ai ajouté des entrées utilisateur et je réalise successivement des appels sur org.apache.maven.archetype.generator.ArchetypeGenerator (sur la base de org.apache.maven.archetype.mojos.CreateProjectFromArchetypeMojo de Maven)...

  9. #9
    Rédacteur
    Avatar de lunatix
    Homme Profil pro
    Architecte technique
    Inscrit en
    Novembre 2002
    Messages
    1 960
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 960
    Points : 3 736
    Points
    3 736
    Par défaut
    ceci dit : en théorie runtime.exe() (en fait il vaut mieux lui préférer ProcessBuilder) ca doit fonctionner.

  10. #10
    Membre éprouvé
    Avatar de michel.di
    Homme Profil pro
    Freelance
    Inscrit en
    Juin 2009
    Messages
    782
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 782
    Points : 1 042
    Points
    1 042
    Par défaut
    Citation Envoyé par lunatix Voir le message
    ceci dit : en théorie runtime.exe() (en fait il vaut mieux lui préférer ProcessBuilder) ca doit fonctionner.
    ça fonctionne sous Linux mais pas sous Windows et je ne sais pas pourquoi

  11. #11
    Rédacteur
    Avatar de lunatix
    Homme Profil pro
    Architecte technique
    Inscrit en
    Novembre 2002
    Messages
    1 960
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 960
    Points : 3 736
    Points
    3 736
    Par défaut
    y'a pas de raison..

    utilise http://docs.oracle.com/javase/1.5.0/...ssBuilder.html
    et regarde la sortie d'erreur

    c'est souvent un probleme d'envirronement

  12. #12
    Membre éprouvé
    Avatar de michel.di
    Homme Profil pro
    Freelance
    Inscrit en
    Juin 2009
    Messages
    782
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 782
    Points : 1 042
    Points
    1 042
    Par défaut
    J'ai essayé ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ProcessBuilder mavenCall = new ProcessBuilder("mvn clean install");
    		Map<String, String> env = mavenCall.environment();
    		env.clear();
    		env.put("CLASSPATH", "<chemin-vers-le-projet-maven>");
    		mavenCall.start();
    Mais j'ai l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    java.io.IOException: Cannot run program "mvn clean install": CreateProcess error=2, The system cannot find the file specified

  13. #13
    Rédacteur
    Avatar de lunatix
    Homme Profil pro
    Architecte technique
    Inscrit en
    Novembre 2002
    Messages
    1 960
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 960
    Points : 3 736
    Points
    3 736
    Par défaut
    met le chemin complet jusqu'a l"executable
    C:\program\maven...

  14. #14
    Membre éprouvé
    Avatar de michel.di
    Homme Profil pro
    Freelance
    Inscrit en
    Juin 2009
    Messages
    782
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 782
    Points : 1 042
    Points
    1 042
    Par défaut
    Oui mais ce qui n'est pas terrible c'est que je vais devoir faire ça selon l'OS et ça dépend aussi ou l'utilisateur l'a installé!

    Faut ajouter ça comment? Dans le classpath aussi?

  15. #15
    Membre éprouvé

    Homme Profil pro
    Architecte technique
    Inscrit en
    Juin 2005
    Messages
    588
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2005
    Messages : 588
    Points : 1 230
    Points
    1 230
    Par défaut
    Citation Envoyé par michel.di Voir le message
    Oui mais ce qui n'est pas terrible c'est que je vais devoir faire ça selon l'OS et ça dépend aussi ou l'utilisateur l'a installé!

    Faut ajouter ça comment? Dans le classpath aussi?
    Du coup mojo-executor revient en force ! Il semble facile a utiliser: tu peux tirer la config du POM ou directement a l'aide des différentes méthodes statiques (dans ton exemple plus haut executeMojo, plugin, groupId... sont des méthodes statiques)... Il suffit en fait de faire un simple mojo avec quelques propriétés systèmes/utilisateurs injectées via Plexus

  16. #16
    Membre éprouvé
    Avatar de michel.di
    Homme Profil pro
    Freelance
    Inscrit en
    Juin 2009
    Messages
    782
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 782
    Points : 1 042
    Points
    1 042
    Par défaut
    Je ne vois pas trop quoi faire la
    Déjà ça :
    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
     
    executeMojo(
        plugin(
            groupId("org.apache.maven.plugins"),
            artifactId("maven-dependency-plugin"),
            version("2.0")
        ),
        goal("copy-dependencies"),
        configuration(
            element(name("outputDirectory"), "${project.build.directory}/foo")
        ),
        executionEnvironment(
            project,
            session,
            pluginManager
        )
    );
    Je ne vois pas quoi en faire... J'ai du louper des trucs

  17. #17
    Membre éprouvé

    Homme Profil pro
    Architecte technique
    Inscrit en
    Juin 2005
    Messages
    588
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2005
    Messages : 588
    Points : 1 230
    Points
    1 230
    Par défaut
    A la louche je n'ai pas encore testé:

    Les injection Plexus passe dans les commantaires... et en ajoutant les import static qui vont bien !

    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
    /**
     * Execute a Mojo using the MojoExecutor.
     *
     * @goal execute-mojo
     */
    public class MojoExecutorMojo extends AbstractMojo {
        /**
         * Plugin to execute.
         *
         * @parameter
         * @required
         */
        private Plugin plugin;
    
    
        /**
         * Plugin goal to execute.
         *
         * @parameter
         * @required
         */
        private String goal;
    
    
        /**
         * Plugin configuration to use in the execution.
         *
         * @parameter
         */
        private XmlPlexusConfiguration configuration;
    
    
        /**
         * The project currently being build.
         *
         * @parameter default-value="${project}"
         * @parameter required
         * @readonly
         */
        private MavenProject mavenProject;
    
    
        /**
         * The current Maven session.
         *
         * @parameter default-value="${session}"
         * @parameter required
         * @readonly
         */
        private MavenSession mavenSession;
    
    
        /**
         * The Maven BuildPluginManager component.
         *
         * @component
         * @required
         */
        private BuildPluginManager pluginManager;
    
    
        public void execute() throws MojoExecutionException {
            
          executeMojo(     
             plugin(         
                 groupId("org.apache.maven.plugins"),         
                   artifactId("maven-dependency-plugin"),         
                   version("2.0")     
                 ),     
                 goal("copy-dependencies"),     
                 configuration(         
                      element(name("outputDirectory"), "${project.build.directory}/foo")     ),     
                     executionEnvironment(         project,         session,         pluginManager     ) 
                  );
        }

  18. #18
    Membre éprouvé
    Avatar de michel.di
    Homme Profil pro
    Freelance
    Inscrit en
    Juin 2009
    Messages
    782
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 782
    Points : 1 042
    Points
    1 042
    Par défaut
    Mon appel de méthode est le suivant :
    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
     
    try {
    			MojoExecutor.executeMojo(
    					MojoExecutor.plugin(
    				    		MojoExecutor.groupId("org.apache.maven.plugins"),
    				    		MojoExecutor.artifactId("maven-dependency-plugin"),
    				    		MojoExecutor.version("2.0")
    				        ),
    				        MojoExecutor.goal("copy-dependencies"),
    				        MojoExecutor.configuration(
    				        		MojoExecutor.element(MojoExecutor.name("outputDirectory"), "${project.build.directory}/foo")
    				        ),
    				        MojoExecutor.executionEnvironment(
    				        		project,
    				        		session,
    				            pluginManager
    				        )
    				    );
    		} catch (MojoExecutionException e) {
    			e.printStackTrace();
    		}
    Comment je spécifie le chemin vers le projet? Et le répertoire de sortie?

  19. #19
    Membre éprouvé

    Homme Profil pro
    Architecte technique
    Inscrit en
    Juin 2005
    Messages
    588
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2005
    Messages : 588
    Points : 1 230
    Points
    1 230
    Par défaut
    De nouvelles injections via Plexus...

    Par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
       /**
         * Plugin goal to execute.
         *
         * @parameter
         * @required
         */
        private String goal;
    Pour injecter le goal dans le mojo !


    Ton mojo se déclare comme suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    /**
     * Execute a Mojo using the MojoExecutor.
     *
     * @goal execute-mojo
     */
    public class MojoExecutorMojo extends AbstractMojo {...}

  20. #20
    Membre éprouvé
    Avatar de michel.di
    Homme Profil pro
    Freelance
    Inscrit en
    Juin 2009
    Messages
    782
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 782
    Points : 1 042
    Points
    1 042
    Par défaut
    Et je suis censé faire quoi dans le execute :p
    J'ai l'impression d'être un boulet sur ce coup la...

Discussions similaires

  1. Compiler code java existant avec MAVEN
    Par AnneG201 dans le forum Maven
    Réponses: 4
    Dernier message: 24/06/2009, 11h58
  2. Comment reprendre un projet existant avec maven
    Par Anthony14 dans le forum Maven
    Réponses: 6
    Dernier message: 22/04/2009, 11h16
  3. Réponses: 2
    Dernier message: 02/04/2009, 16h42
  4. creation d'un projet Xfire avec Maven
    Par friedamichelle dans le forum Maven
    Réponses: 5
    Dernier message: 31/01/2008, 15h26

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