Quelqu'un peut-il donner un bon exemple d'utilisation org.apache.maven.cli.MavenCli programme?

StackOverflow https://stackoverflow.com/questions/4206679

  •  25-09-2019
  •  | 
  •  

Question

Je suis en train de créer un plugin IntelliJ qui doit exécuter des cibles Maven sur le projet en cours. Tous les discours dans les intertubes recommande d'utiliser le MavenEmbedder. Bonne chance avec ça. La version 2.0.4 est pas bien pris en charge et il n'y a aucune référence pour savoir comment l'utiliser.

Je lui ai donné un tourbillon et a couru dans un mur où l'embedded n'a pas été initialisé avec tous les champs dont il a besoin. injection parlementaire réfléchissant? Impressionnant! Pourquoi quelqu'un aurait besoin d'une manière évidente pour initialiser un objet?

Il semble que quelques personnes utilisent une version 2.1 avec un certain succès. Je suis incapable de trouver que dans un pot ou même sources.

Je suis allé vérifier la version 3.0 du projet embedded: http://maven.apache.org/ref/3.0-beta-3/maven-embedder/ Il supprime l'objet MavenEmbedder tous ensemble et semble soutenir que l'accès par les méthodes principales ou sur MavenCli domaine. Quelqu'un at-il utilisé ces méthodes et peut donner quelques conseils?

Était-ce utile?

La solution

Oui, le n'y a pas beaucoup de la manière de la documentation de MavenCli. L'API est plus simple significatly mais je encore comme quelques exemples. Voici un qui fonctionne ...

MavenCli cli = new MavenCli();
int result = cli.doMain(new String[]{"compile"},
        "/home/aioffe/workspace/MiscMaven",
        System.out, System.out);
System.out.println("result: " + result);

Il faut dir et exécute la phase de 'compilation' ...

Autres conseils

Configuration de travail Maven pour maven 3.1.1

Dépendances

<dependencies>
    <dependency>
        <groupId>org.apache.maven</groupId>
        <artifactId>maven-embedder</artifactId>
        <version>3.1.1</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.aether</groupId>
        <artifactId>aether-connector-wagon</artifactId>
        <version>0.9.0.M2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.maven.wagon</groupId>
        <artifactId>wagon-http-lightweight</artifactId>
        <version>2.5</version>
    </dependency>
</dependencies>

code

MavenCli cli = new MavenCli();

cli.doMain(new String[]{"clean", "compile"}, "project_dir", System.out, System.out);

Les informations de matrice de dépendance pour les étendues et les composants dynamiquement acquises fournies peut être un peu compliqué. Ce fut pour moi, car il me semblait que je suis tous les éléments requis par la dépendance directe ou transitif, mais la résolution à distance ne fonctionne pas.

Je voulais passer à Maven 3.3.3 (dernière en date du 25/05/2015). Je l'ai eu à travailler sans les erreurs de sisu qui ont présenté quand j'ai essayé de mettre à jour les versions actuelles avec optimisme des choses spécifiées ici (et ailleurs). Ce projet avec une étiquette qui a travaillé avec l'exemple spécifié à partir d'aujourd'hui en utilisant JDK8.

https://github.com/mykelalvis/test-maven- embedded / arbre / 20150525-travail

DEPS pertinents (SLF4J est juste pour que je puisse voir les journaux)

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>1.7.5</version>
    </dependency>
    <dependency>
        <groupId>org.apache.maven</groupId>
        <artifactId>maven-embedder</artifactId>
        <version>3.3.3</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.aether</groupId>
        <artifactId>aether-connector-basic</artifactId>
        <version>1.0.2.v20150114</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.aether</groupId>
        <artifactId>aether-transport-wagon</artifactId>
        <version>1.0.2.v20150114</version>
    </dependency>
    <dependency>
        <groupId>org.apache.maven.wagon</groupId>
        <artifactId>wagon-http</artifactId>
        <version>2.9</version>
    </dependency>
    <dependency>
        <groupId>org.apache.maven.wagon</groupId>
        <artifactId>wagon-provider-api</artifactId>
        <version>2.9</version>
    </dependency>
    <dependency>
        <groupId>org.apache.maven.wagon</groupId>
        <artifactId>wagon-http-lightweight</artifactId>
        <version>2.9</version>
    </dependency>   

L'exécution de c'est:

rm -r ~/.m2/repository/org/apache/maven/plugins/maven-clean-plugin/
mvn exec:java

Probablement aurait fait un test unitaire de quelque sorte.

Si quelqu'un a une solution supérieure pour Maven 3.3.3 intégrée (à savoir est venu avec une plus petite ou plus orientée gamme ensemble de dépendances requises), s'il vous plaît les poster.

pour appuyer sur le commentaire de @StevePerkins, et en utilisant la version Maven 3.1.0,

Je devais exclure la dépendance transitive de aether-connecteur-wagon à wagon-fournisseur-api pour le faire fonctionner.

pom.xml:

(...)
<dependency>
    <groupId>org.apache.maven</groupId>
    <artifactId>maven-embedder</artifactId>
    <version>3.1.0</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.eclipse.aether</groupId>
    <artifactId>aether-connector-wagon</artifactId>
    <version>0.9.0.M2</version>
    <scope>test</scope>
    <exclusions>
        <exclusion>
            <groupId>org.apache.maven.wagon</groupId>
            <artifactId>wagon-provider-api</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.apache.maven.wagon</groupId>
    <artifactId>wagon-http</artifactId>
    <version>2.5</version>
    <scope>test</scope>
</dependency>
(...)

et voici un exemple java:

(...)
MavenCli cli = new MavenCli();

ByteArrayOutputStream baosOut = new ByteArrayOutputStream();
ByteArrayOutputStream baosErr = new ByteArrayOutputStream();

PrintStream out = new PrintStream(baosOut, true);
PrintStream err = new PrintStream(baosErr, true);

cli.doMain( new String[] { "clean" }, new File("."), out, err );

String stdout = baosOut.toString("UTF-8");
String stderr = baosErr.toString("UTF-8");
(...)

ici

Il y a une matrice de dépendance pour chaque version de maven-embedder, par exemple, pour 3.2.5: http://maven.apache.org/ ref / 3.2.5 / maven embedded / dependencies.html

Sur la base que je devais utiliser org.apache.maven:maven-embedder:jar:3.2.5, org.apache.maven:maven-aether-provider:jar:3.2.5 et org.apache.maven.wagon:wagon-provider-api:jar:2.8.

Il fixe également la dépendance sur la bibliothèque très ancienne goyave, puisque cette version utilise 18,0.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top