288 votes

exécuter la classe principale du projet Maven

J'ai créé une simple application Java de type console construite avec Maven. Existe-t-il un moyen d'exécuter la classe principale (qui ne requiert aucun argument) à partir de la ligne de commande en utilisant une commande Maven du type :

mvn run-app com.example.MainClass

588voto

Matthew Farwell Points 31257

Essayez le maven-exec-plugin . De là :

mvn exec:java -Dexec.mainClass="com.example.Main"

Ceci va exécuter votre classe dans la JVM. Vous pouvez utiliser -Dexec.args="arg0 arg1" pour passer des arguments.

Si vous êtes sous Windows, appliquez les devis de exec.mainClass y exec.args :

mvn exec:java -D"exec.mainClass"="com.example.Main"

Si vous faites cela régulièrement, vous pouvez également ajouter les paramètres dans le pom.xml :

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <version>1.2.1</version>
  <executions>
    <execution>
      <goals>
        <goal>java</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <mainClass>com.example.Main</mainClass>
    <arguments>
      <argument>foo</argument>
      <argument>bar</argument>
    </arguments>
  </configuration>
</plugin>

0 votes

C'est un bon aussi. Je ne savais pas qu'il existait.

20 votes

Il n'est pas pratique d'exécuter la classe principale de cette façon :(

86 votes

Suis-je le seul à souhaiter que maven ait une convention intégrée où vous pourriez taper "mvn run" et la classe principale de votre programme principal s'exécuterait automatiquement sans que vous ayez à donner à maven des détails qu'il devrait déjà connaître (comme ce qu'est votre classe principale).

16voto

albfan Points 2333

Bien que maven exec fasse l'affaire ici, je l'ai trouvé assez pauvre pour un vrai test. En attendant que shell maven et en espérant que cela puisse aider d'autres personnes, j'ai finalement trouvé ce dépôt. mvnexec

Clonez-le, et faites un lien symbolique avec le script quelque part sur votre chemin. J'utilise ~/bin/mvnexec comme je l'ai fait. ~/bin sur mon chemin. Je pense mvnexec est un bon nom pour le script, mais c'est à vous de modifier le lien symbolique...

Lancez-le à partir de la racine de votre projet, où vous pouvez voir les répertoires src et target.

Le script recherche les classes avec la méthode main, offrant une sélection pour en choisir une (Exemple avec mavenized JMeld projet)

$ mvnexec 
 1) org.jmeld.ui.JMeldComponent
 2) org.jmeld.ui.text.FileDocument
 3) org.jmeld.JMeld
 4) org.jmeld.util.UIDefaultsPrint
 5) org.jmeld.util.PrintProperties
 6) org.jmeld.util.file.DirectoryDiff
 7) org.jmeld.util.file.VersionControlDiff
 8) org.jmeld.vc.svn.InfoCmd
 9) org.jmeld.vc.svn.DiffCmd
10) org.jmeld.vc.svn.BlameCmd
11) org.jmeld.vc.svn.LogCmd
12) org.jmeld.vc.svn.CatCmd
13) org.jmeld.vc.svn.StatusCmd
14) org.jmeld.vc.git.StatusCmd
15) org.jmeld.vc.hg.StatusCmd
16) org.jmeld.vc.bzr.StatusCmd
17) org.jmeld.Main
18) org.apache.commons.jrcs.tools.JDiff
#? 

Si l'un d'entre eux est sélectionné (en tapant le numéro), vous êtes invité à fournir des arguments (vous pouvez éviter avec la touche mvnexec -P )

Par défaut, il compile le projet à chaque exécution. Mais vous pouvez éviter cela en utilisant mvnexec -B

Il permet de rechercher uniquement dans les classes de test -M o --no-main ou seulement dans les classes principales -T o --no-test . dispose également d'une option de filtrage par nom -f <whatever>

J'espère que cela vous fera gagner du temps, pour moi c'est le cas.

4 votes

Notez que cela ne fonctionnera pas sur Windows qui ne dispose pas des programmes nécessaires.

0 votes

C'est vrai. Pour Windows, vous pouvez toujours utiliser cygwin, pour obtenir un shell *nix comme, avec grep, sed, cut ...

0 votes

J'ai gagné beaucoup de temps, merci.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X