with plugin example dependency create java maven-2 exec-maven-plugin

plugin - Desde Maven, ¿cómo administro una clase que vive bajo src/test/java?



maven-dependency-plugin (4)

Heredé una base de código :)

Bajo src / test / java / hay un archivo que necesito ejecutar (Necesito ejecutar su public static void main(String[] args) , no un método @Test dentro de él).

Lo más cercano que tengo es:

mvn -e exec:java -Dexec.mainClass="com.me.packagex.RunFile" -Dexec.classpathScope="test"

pero eso falla, y parece ser porque RunFile quiere usar clases que existen en src / main / java / com / me / packagex / (notice, / main /, not / test /). Los archivos que están debajo están en el mismo paquete que RunFile, es decir, ''package com.me.packagex;''.

Si -Dexec.classpathScope="test" el -Dexec.classpathScope="test" entonces no puede encontrar RunFile en absoluto. Es como si tuviera que darle dos alcances, pero no acepta "probar, compilar".

La persona de la que he heredado esto (querido difunto) solía ejecutarlo desde Eclipse. Necesito una forma de ejecutarlo desde la línea de comandos.

Espero que esto esté claramente explicado.

tyvm,

Esto es prometedor Pascal, he probado tu ejemplo y eso no funciona para mí.

Aunque ahora lo miro, no es encontrar Demo, en lugar de no encontrar a Dog.

Apache Maven 2.2.1 (rdebian-1) Java version: 1.6.0_18 Java home: /usr/lib/jvm/java-6-openjdk/jre Default locale: en_GB, platform encoding: UTF-8 OS name: "linux" version: "2.6.32-25-generic" arch: "i386" Family: "unix" $ mvn -e exec:java -Dexec.mainClass="com.stackoverflow.Demo" -Dexec.classpathScope="test" [ERROR] BUILD ERROR [INFO] ------------------------------------------------------------------------ [INFO] An exception occured while executing the Java class. com.stackoverflow.Demo [INFO] ------------------------------------------------------------------------ [INFO] Trace org.apache.maven.lifecycle.LifecycleExecutionException: An exception occured while executing the Java class. com.stackoverflow.Demo at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:719) at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeStandaloneGoal(DefaultLifecycleExecutor.java:569) at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:539) at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:387) at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:348) at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:180) at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:328) at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:138) at org.apache.maven.cli.MavenCli.main(MavenCli.java:362) at org.apache.maven.cli.compat.CompatibleMain.main(CompatibleMain.java:60) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315) at org.codehaus.classworlds.Launcher.launch(Launcher.java:255) at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430) at org.codehaus.classworlds.Launcher.main(Launcher.java:375) Caused by: org.apache.maven.plugin.MojoExecutionException: An exception occured while executing the Java class. com.stackoverflow.Demo at org.codehaus.mojo.exec.ExecJavaMojo.execute(ExecJavaMojo.java:346) at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:490) at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:694) ... 17 more Caused by: java.lang.ClassNotFoundException: com.stackoverflow.Demo at java.net.URLClassLoader$1.run(URLClassLoader.java:202) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:307) at java.lang.ClassLoader.loadClass(ClassLoader.java:248) at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:284) at java.lang.Thread.run(Thread.java:619)


(...) Espero que esto esté claramente explicado.

No está mal, pero no puedo reproducirme. Creé un proyecto:

$ mvn archetype:generate -DgroupId=com. / -DartifactId=Q4060613 / -Dversion=1.0-SNAPSHOT / -DarchetypeArtifactId=maven-archetype-quickstart

A continuación, lo cd y creé una clase Dog (en src/main/java ):

$ cd Q4060613 $ cat > src/main/java/com//Dog.java package com.; public class Dog { public String bark() { return "woof!"; } }

y creó una clase Demo (bajo src/test/java ):

$ cat > src/test/java/com//Demo.java package com.; public class Demo { public static void main(String[] args) { System.out.println(new Dog().bark()); } }

Después de compilar el código fuente, ejecutar el comando que proporcionó funciona como se esperaba:

$ mvn test ... $ mvn exec:java -Dexec.mainClass="com..Demo" -Dexec.classpathScope="test" [INFO] Scanning for projects... ... [INFO] --- exec-maven-plugin:1.2:java (default-cli) @ Q4060613 --- woof! [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ ...

Algo más debe estar mal.


Enfrenté el mismo problema y lo resolví.

En resumen, la clase debe compilarse antes de exec:java objetivo de exec:java . (Sin duda funciona sin fase de test-compile si la clase ya está compilada por otra acción del usuario. Tenga en cuenta que , en su respuesta , invocó mvn test antes de exec:java ).

$ mvn -Dexec.mainClass=... -Dexec.classpathScope=test test-compile exec:java

Puedes probarlo por ti mismo si quieres volver a ver la ClassNotFoundException .

$ mvn -Dexec.mainClass=... -Dexec.classpathScope=test clean exec:java


Incluye las siguientes líneas en pom.xml en el plugin exec-maven-plugin. <classpathScope>test</classpathScope>

La sección de plugin en POM se parece a esto

<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <executions> <execution> <id>my-execution</id> <phase>test</phase> <goals> <goal>java</goal> </goals> </execution> </executions> <configuration> <mainClass>com.example.MainClass</mainClass> <classpathScope>test</classpathScope> </configuration> </plugin>

Nota: com.example.MainClass es la clase que contiene el método principal .


Ok, espoleado por el trabajo para todos los demás que cavé un poco más duro. El código no informaba sus problemas muy bien y estaba malinterpretando la pila de fichas.

Lo hace:

FileInputStream is = new FileInputStream("lib/other-thing.jar");

que estaba fallando Uní un enlace a trunk / src / main / assembly / lib / en trunk / y ahora funciona. Sin embargo, podría haber una forma más ordenada de arreglar eso, el enlace simbólico.

Gracias, chicos.