ejecutar la clase principal del proyecto Maven [duplicar]


Esta pregunta ya tiene una respuesta aquí:

He creado una aplicación Java de consola simple que se construye con Maven. ¿Hay alguna manera de que la clase main (que no requiere ningún argumento) se pueda ejecutar desde la línea de comandos usando un comando maven como:

mvn run-app com.example.MainClass
Author: Matthew Farwell, 2012-03-24

2 answers

Pruebe el maven-exec-plugin. A partir de ahí:

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

Esto ejecutará su clase en la JVM. Puede usar -Dexec.args="arg0 arg1" para pasar argumentos.

Si estás en Windows, aplica comillas para exec.mainClass y exec.args:

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

Si está haciendo esto regularmente, puede agregar los parámetros en el pom.xml también:

<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
Author: Matthew Farwell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-28 18:35:43

Aunque maven exec hace el truco aquí, me pareció bastante pobre para una prueba real. Mientras esperaba maven shell , y esperando que esto pudiera ayudar a otros, finalmente salí a este repo mvnexec

Clónalo y enlaza el script en algún lugar de tu ruta. Yo uso ~/bin/mvnexec, como lo he hecho ~/bin en mi camino. Creo que mvnexec es un buen nombre para el script, pero depende de usted cambiar el enlace simbólico...

Ejecútelo desde la raíz de su proyecto, donde puedes ver src y dirs de destino.

El script busca clases con el método main, ofreciendo un select to choose (Ejemplo con el proyecto mavenized JMeld)

$ 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 se selecciona uno (número de escritura), se le solicitan argumentos (se puede evitar con mvnexec -P)

Por defecto compila proyecto cada ejecución. pero puedes evitar eso usando mvnexec -B

Permite buscar solo en clases de prueba -M o --no-main, o solo en clases principales -T o --no-test. también tiene una opción de filtro por nombre -f <whatever>

Espero que esto pueda ahorrarle algo de tiempo, para mí lo hace.

 13
Author: albfan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-16 08:36:57