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".

Verhogen
la source

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>
Robert Munteanu
la source
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.

Saikat
la source
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.

shshnk
la source
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.

arulraj.net
la source
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

Abhijeet
la source
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