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 :

Exécution MOJO sans le CLI <MavenEmbedder>


Sujet :

Maven Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de ZnhaarX
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 146
    Par défaut Exécution MOJO sans le CLI <MavenEmbedder>
    Bonjour à tous,

    Voilà concrètement ce que j'aimerai faire c'est de pour pouvoir exécuter un mojo dans une application java quelconque sans utiliser le command line interface.
    J'ai pas mal fait de recherches mais il n'y a pas d'exemples sur le net. (Dès que l'on commence à s’intéresser au kernel de maven et à tout le code source à côté, on trouve malheureusement très peu de choses).

    Par exemple, dans le cas du plugin que je suis en train d'élaborer, je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mvn gcl:analyze -Doutput=report.xml
    L'idée serait d'utiliser ce que propose Maven Embedder pour pouvoir exécuter le mojo sans passer par le CLI. En clair, un utilisateur possède le .jar et applique son plugin (indépendamment du cycle de vie de base de maven) à un projet maven quelconque.
    Donc on aurait quelque chose du genre:

    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
    import org.apache.maven.cli.*;
    import org.codehaus.plexus.classworlds.ClassWorld;
     
    public class GoalExecutor {
     
    	@SuppressWarnings("static-access")
    	public static void main(String[] args) {
    		String realmId = "com.plugin.maven:gcl-maven-plugin:0.0.1-SNAPSHOT";
    		ClassWorld classworld = new ClassWorld(realmId,Thread.currentThread().getContextClassLoader());
    		MavenCli mavencli = new MavenCli();
    		int result = mavencli.main(new String[] { "gcl:analyze", "-Doutput=report.xml" },classworld);
    		System.out.println("Result :" + result);
    	}
     
    }
    Le problème étant que je ne vois pas troppas comment utiliser le tout... et comme je n'ai trouvé aucune référence expliquant comment utiliser tout ceci, je rame un peu. Disons que je ne vois pas trop comment utiliser correctement le ClassWorld... Et surtout je ne vois pas vraiment comment ajouter toute la configuration qui va derrière.

    En passant les sources de maven embedder:
    http://svn.apache.org/viewvc/maven/m...aven-embedder/

    J'ai aussi vu le topic de Romaintaz ici:
    http://www.developpez.net/forums/d82...mavenembedder/
    Ce qui est à peut-prêt ce que j'aimerai faire; cependant vu que c'est une version 2.* et que Maven Embedder a complètement été refait sur la version 3.0.*, le mécanisme d'utilisation n'est pas le même.

    Voilà, merci d'avance
    Je continue mes recherches.

  2. #2
    Membre expérimenté Avatar de ZnhaarX
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 146
    Par défaut
    Bon allez j'ai trouvé la solution

    Donc en fait, j'avais un peu "déraillé" dans le sens où je n'avais pas fait de projet standalone pour mon application... J'avais mis une classe GoalExecutor dans mon projet de plugin maven, et pas mal de choses rentraient en conflit.
    Bref quoi qu'il en soit, Maven Embedder 3.0.x est vraiment très simple d'utilisation en fait
    Pour ceux que ça intéresserait un jour:

    GoalExecutor.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import java.io.File;
    import org.apache.maven.cli.MavenCli;
     
    public class GoalExecutor 
    {
    	public static void main( String[] args ) throws Exception { 
    		MavenCli cli = new MavenCli(); 
    		cli.doMain( new String[] { "package" }, new File("../Projet_a_Packager").getAbsolutePath(), System.out, System.err ); 
    	} 
    }
    pom.xml
    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
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    	<modelVersion>4.0.0</modelVersion>
     
    	<groupId>StandaloneJavaProject</groupId>
    	<artifactId>StandaloneJavaProject</artifactId>
    	<version>0.0.1-SNAPSHOT</version>
    	<packaging>jar</packaging>
     
    	<name>StandaloneJavaProject</name>
    	<url>http://maven.apache.org</url>
     
    	<properties>
    		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    	</properties>
     
    	<dependencies>
    		<dependency>
    			<groupId>org.apache.maven</groupId>
    			<artifactId>maven-embedder</artifactId>
    			<version>3.0.3</version>
    		</dependency>
    	</dependencies>
    </project>
    Voili, voilou...
    Rien de bien compliqué au final, mais du temps perdu à chercher trop compliqué
    En espérant que ça aide quelqu'un un jour

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lancer un exécutable externe sans fenetre CMD
    Par Nyphel dans le forum C++
    Réponses: 4
    Dernier message: 15/03/2007, 09h21
  2. Requête access exécutée mais sans résultat
    Par gids01 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 28/02/2007, 09h33
  3. [MS-DOS] Exécuter xcopy sans devoir lancer Windows XP SP2
    Par natif dans le forum Scripts/Batch
    Réponses: 11
    Dernier message: 25/09/2006, 15h39
  4. Exécuter requête sans afficher le résultat
    Par picatchou dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 18/09/2006, 22h32
  5. [Système] Exécuter script sans afficher page
    Par philippe281281 dans le forum Langage
    Réponses: 18
    Dernier message: 08/08/2006, 19h14

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