Projet Maven Run


231

Existe-t-il une «phase» ou un «objectif» Maven pour exécuter simplement la méthode principale d'une classe Java? J'ai un projet que j'aimerais tester manuellement en faisant simplement quelque chose comme "mvn run".

Réponses:


348

Voir le plugin exec maven . Vous pouvez exécuter des classes Java en utilisant:

mvn exec:java -Dexec.mainClass="com.example.Main" [-Dexec.args="argument1"] ...

L'invocation peut être aussi simple que mvn exec:javasi la configuration du plugin se trouve dans votre pom.xml. Le site du plugin sur Mojohaus a un exemple plus détaillé .

<project>
    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.2.1</version>
                <configuration>
                    <mainClass>com.example.Main</mainClass>
                    <arguments>
                        <argument>argument1</argument>
                    </arguments>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

14
voici à quoi devrait ressembler une réponse! référence + exemple simple + exemple complexe. l'exemple simple a fait l'affaire pour moi (plus de configuration nécessaire)
codewing

1
Existe-t-il une version plus récente de ce plugin (plus récente que 1.2.1?)
Alexander Mills

Oui, il existe une version plus récente, donc ne copiez pas le fragment ci-dessus 1-to-1 à moins que vous ne souhaitiez utiliser la version 1.2.1 Voir mojohaus.org/exec-maven-plugin/usage.html pour la dernière version c'est 1.6.0
user1053510

Merci, sauriez-vous également comment exécuter une classe principale si elle est en sous-module avec des dépendances dans d'autres modules?
user1767316

Cela ne gère pas réellement la classe principale
Dexter

23

1. Modifiez POM.xml

Ajoutez la propriété suivante dans pom.xml. Assurez-vous d'utiliser le nom de classe complet (c'est-à-dire avec le nom du package) qui contient la mainméthode:

<properties>
        <exec.mainClass>fully-qualified-class-name</exec.mainClass>
</properties>

2. Exécutez la commande

À partir du terminal, déclenchez la commande suivante:

mvn clean compile exec:java

REMARQUE Vous pouvez passer d'autres arguments via -Dexec.args="xxx"flag.


Est-ce que cela fonctionne réellement? Je l'ai essayé à la fois: <exec.mainClass> $ {foo.bar.SomeMainClass} </ exec.mainClass> et <exec.mainClass> foo.bar.SomeMainClass </exec.mainClass> et cela ne fonctionne pas . L'erreur est la même: [ERREUR] Échec de l'exécution de l'objectif org.codehaus.mojo: exec-maven-plugin: 1.6.0: java (default-cli) sur le projet newtrex: les paramètres 'mainClass' pour l'objectif org.codehaus.mojo : plugin exec-maven: 1.6.0: java manquant ou invalide -> [Aide 1]
Nenad Bulatovic

Cela fonctionne, vous voudrez peut-être vérifier ce post
Saikat

@NenadBulatovic: Cela fonctionne si vous remplacez $ {foo.bar.SomeMainClass} par foo.bar.SomeMainClass -> sans $ ou {}
Krishna Santosh Sampath

14

Les réponses mentionnées ci-dessus sont correctes mais je les simplifie pour les noobs comme moi.Allez au fichier pom de votre projet. Ajoutez une nouvelle propriété exec.mainClasset indiquez sa valeur en tant que classe contenant votre méthode principale. Pour moi , il était DriverClassen mainpkg. Changez-le selon votre projet. entrez la description de l'image ici

Cela fait, accédez au dossier qui contient vos projets pom.xmlet exécutez-le à l'invite de commande mvn exec:java. Cela devrait appeler la méthode principale.


8

Pas besoin d'ajouter un nouveau plugin dans pom.xml. Exécutez simplement cette commande

mvn org.codehaus.mojo:exec-maven-plugin:1.5.0:java -Dexec.mainClass="com.example.Main" | grep -Ev '(^\[|Download\w+:)' 

Voir le plugin maven exec pour plus d'utilisation.


Passez d'autres arguments via-Dexec.args="...arg..."
sstn


2

clean package exec:java -P Class_Containing_Main_Method La commande est également une option si vous n'avez qu'une seule méthode principale (PSVM) dans le projet, avec la configuration Maven suivante.

N'oubliez pas de mentionner la classe dans la <properties></properties>section pom.xml:

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <java.main.class>com.test.service.MainTester</java.main.class>
</properties>

<plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.2.1</version>
        <configuration>
           <mainClass>${java.main.class}</mainClass>
        </configuration>
</plugin>

Configuration d'exécution STS avec la configuration Maven ci-dessus:

entrez la description de l'image ici


Cela ne me semble pas juste. N'est-ce pas -P pour «profil»? Si vous le spécifiez sur la ligne de commande, pourquoi devez-vous le mettre dans les propriétés du plugin?
Rup

@Rup Oui, -Pc'est pour le profil. Partagé, car c'est également une option pour exécuter le projet Maven.
Abhijeet
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.