从Maven,我如何运行一个生活在src / test / java下的类? [英] From Maven, how do I run a class that lives under src/test/java?
问题描述
我继承了一个代码库:)
I have inherited a codebase :)
在src / test / java /下面有一个我需要运行的文件(我需要运行它的 public static void main(String [] args)
,而不是 @Test
方法。)
Under src/test/java/ there's a file that I need to run (I need to run its public static void main(String[] args)
, not a @Test
method within it).
我最接近的是:
mvn -e exec:java -Dexec.mainClass="com.me.packagex.RunFile" -Dexec.classpathScope="test"
但是那会失败,它似乎是因为RunFile想要使用src / main / java / com / me / packagex /(notice,/ main /,not / test /)下的类。其下的文件与RunFile在同一个包中,即'package com.me.packagex;'。
but that then fails, and it appears to be because RunFile wants to use classes that exist under src/main/java/com/me/packagex/ (notice, /main/, not /test/). The files under there are in the same package as RunFile, i.e. 'package com.me.packagex;'.
如果我删除 -Dexec .classpathScope =test
然后根本找不到RunFile。这就好像我需要给它两个范围,但它不接受测试,编译。
If I remove the -Dexec.classpathScope="test"
then it can't find RunFile at all. It's as if I need to give it two scopes, but it doesn't accept "test,compile".
我继承了这个人(亲爱的离开)曾经从Eclipse运行它。我需要一种方法从命令行运行它。
The person I've inherited this from (dearly departed) used to run it from Eclipse. I need a way to run it from the command-line.
我希望这清楚解释。
tyvm,
这很有希望。帕斯卡尔,我已经尝试过你的例子了不为我工作。
This is promising. Pascal, I've tried your example and that doesn't work for me.
虽然现在我看着它 - 它没有找到演示而不是没有找到狗。
Although now I look at it - it's not finding Demo, rather than not finding 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)
推荐答案
(...)我希望这清楚解释。
(...) I hope this is clearly explained.
不错但我无法重现。我创建了一个项目:
Not bad but I can't reproduce. I created a project:
$ mvn archetype:generate -DgroupId=com.stackoverflow \
-DartifactId=Q4060613 \
-Dversion=1.0-SNAPSHOT \
-DarchetypeArtifactId=maven-archetype-quickstart
然后 cd
加入并创建了一个 Dog
类(在 src / main / java $ c $下) c>):
Then cd
ed into it and created a Dog
class (under src/main/java
):
$ cd Q4060613
$ cat > src/main/java/com/stackoverflow/Dog.java
package com.stackoverflow;
public class Dog {
public String bark() {
return "woof!";
}
}
并创建演示
class(在 src / test / java
下):
and created a Demo
class (under src/test/java
):
$ cat > src/test/java/com/stackoverflow/Demo.java
package com.stackoverflow;
public class Demo {
public static void main(String[] args) {
System.out.println(new Dog().bark());
}
}
编译源代码后,运行您提供的命令按预期工作:
After compiling the source code, running the command you provided works as expected:
$ mvn test
...
$ mvn exec:java -Dexec.mainClass="com.stackoverflow.Demo" -Dexec.classpathScope="test"
[INFO] Scanning for projects...
...
[INFO] --- exec-maven-plugin:1.2:java (default-cli) @ Q4060613 ---
woof!
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
...
别的一定是错的。
这篇关于从Maven,我如何运行一个生活在src / test / java下的类?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!