web-dev-qa-db-fra.com

exécuter la classe principale du projet Maven

J'ai créé une application console Java simple, construite avec Maven. Existe-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 une commande maven comme celle-ci:

mvn run-app com.example.MainClass
246
Dónal

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

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

Cela exécutera votre classe dans la machine virtuelle Java. Vous pouvez utiliser -Dexec.args="arg0 arg1" pour passer des arguments.

Si vous utilisez Windows, appliquez des guillemets pour exec.mainClass et exec.args:

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

Si vous le faites régulièrement, vous pouvez également ajouter les paramètres dans le fichier 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>
518
Matthew Farwell

Bien que Maven Exec fasse le tour ici, je l’ai trouvé assez médiocre pour un vrai test. En attendant maven Shell , et espérant que cela pourrait aider les autres, je me suis finalement rendu à ce dépôt mvnexec

Clonez-le et faites un lien symbolique vers le script quelque part dans votre chemin. J'utilise ~/bin/mvnexec, car j'ai ~/bin dans mon chemin. Je pense que mvnexec est un bon nom pour le script, mais qu'il vous incombe de changer le lien symbolique ...

Lancez-le à 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 à select d’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 est sélectionné (numéro de frappe), vous êtes invité à argumenter (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

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

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

15
albfan