web-dev-qa-db-fra.com

De Maven, comment puis-je courir une classe qui vit sous SRC / Test / Java?

J'ai hérité d'une base de code :)

Sous SRC/Test/Java/Il y a un fichier que je dois exécuter (je dois exécuter sa fonction public static void main(String[] args), pas un @Test méthode à l'intérieur).

Le plus proche que j'ai obtenu est:

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

mais cela échoue alors, et cela semble être parce que RunFile veut utiliser des cours qui existent sous SRC/Main/Java/Com/Me/Packagex/(Avis,/Main /, Non/Test/Test /). Les fichiers sous le même package sont dans le même package que Runfile, c'est-à-dire "package com.me.packagex; '.

Si je supprime le -Dexec.classpathScope="test" Ensuite, il ne peut pas trouver runfile du tout. C'est comme si j'ai besoin de lui donner deux scopes, mais cela n'accepte pas "Test, compiler".

La personne que j'ai héritée de cela de (chèrement disparu) l'habitude de l'exécuter de Eclipse. J'ai besoin d'un moyen de l'exécuter de la ligne de commande.

J'espère que cela est clairement expliqué.

tyvm,


Ceci est prometteur. Pascal, j'ai essayé votre exemple et que pas Travailler pour moi.

Bien que maintenant je regarde - ça ne trouve pas de démonstration, plutôt que de ne pas trouver de chien.

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)
45
woddle

Inclure les lignes suivantes dans POM.XML dans le plugin Exec-Maven-Plugin. <classpathScope>test</classpathScope>

la section de plugin dans POM semble quelque chose comme ça

<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>

Remarque: com.example.MainClass est la classe contenant principale méthode.

21
Jeevan Adiga

J'ai fait face au même problème et je l'ai compris.

Busticalement, La classe doit être compilée avant exec:Java but. (Ça travaille sûrement sans test-compile phase si la classe est déjà compilée par une autre action utilisateur. Notez que Pascal thivent , dans sa réponse , invoqué mvn test avant exec:Java.)

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

Vous pouvez le prouver pour vous-même si vous voulez voir le ClassNotFoundException à nouveau.

$ mvn -Dexec.mainClass=... -Dexec.classpathScope=test clean exec:Java
18
Jin Kwon

Ok, stimulé par cela travaillant pour tout le monde que j'ai creusé un peu plus fort. Le code ne signalait pas très bien ses problèmes et je faisais une erreur sur la cheminée.

Cela fait:

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

qui échouait. Je suis un tronc symbolique/src/principal/assemblée/lib/dans le coffre/et maintenant ça marche. Il pourrait y avoir une façon de Néater pour résoudre que le symbole sympathique, cependant.

Merci chaps.

0
woddle