lancer la classe principale du projet Maven [dupliquer]

cette question a déjà une réponse ici:

  • Projet Maven Run 6 réponses

j'ai créé une application Java simple console qui est construite avec Maven. Y a-t-il un moyen pour que la classe principale (qui ne nécessite aucun argument) puisse être exécutée à partir de la ligne de commande en utilisant un maven commande comme:

mvn run-app com.example.MainClass
215
demandé sur Matthew Farwell 2012-03-24 00:23:21

2 réponses

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

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

ce sera votre classe dans le JVM. Vous pouvez utiliser -Dexec.args="arg0 arg1" pour passer des arguments.

si vous êtes sur Windows, appliquez des guillemets pour exec.mainClass et exec.args :

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

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

<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>
448
répondu Matthew Farwell 2017-11-28 18:35:43

bien que maven exec fasse le tour ici, je l'ai trouvé assez pauvre pour un vrai test. En attendant Maven shell , et en espérant que cela pourrait aider les autres, je suis finalement sorti à ce rapport mvnexec

le cloner, et symlink le script quelque part dans votre chemin. J'utilise ~/bin/mvnexec , comme j'ai ~/bin sur mon chemin. Je pense que mvnexec est un bon nom pour le script, mais c'est à vous de changer le lien...

le lancer à partir de la racine de votre projet, où vous pouvez voir src et dirs cible.

la recherche de script pour les classes avec la méthode principale, offrant un select pour choisir un (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 est sélectionné (en tapant le numéro), vous êtes invité pour les arguments (vous pouvez éviter avec mvnexec -P )

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

permet de rechercher uniquement dans les classes d'essai -M ou --no-main , ou seulement dans les classes principales -T ou --no-test . dispose également d'un filtre par l'option de nom -f <whatever>

J'espère que cela pourrait vous faire gagner du temps, pour moi si.

13
répondu albfan 2014-11-16 08:36:57