如何通过maven运行java文件?
如何通过maven执行SampleFlowTest.java
?如何通过maven运行java文件?
里面的代码SampleFlowTest.java
是:
package com.myname.module.test;
import com.myname.partA.something;
import java.util.Scanner;
import java.util.ArrayList;
public class SampleFlowTest {
public static void main(String[] args) {
// something I want to execute
}
}
文件树如下所示。
.
├── pom.xml
├── resource
│ ├── fileA.txt
│ └── fileB.txt
├── src
│ ├── main
│ │ └── java
│ │ └── com
│ │ └── myname
│ │ ├── partA
│ │ │ └── Aaa.java
│ │ ├── partB
│ │ │ ├── B.java
│ │ │ ├── Bb.java
│ │ │ └── Bbb.java
│ │ └── module
│ │ ├── M1.java
│ │ └── M2.java
│ └── test
│ └── java
│ └── com
│ └── myname
│ ├── partA
│ │ └── test
│ │ └── AaaTest.java
│ ├── partC
│ │ └── service
│ │ └── test
│ │ ├── BTest.java
│ │ └── BbbTest.java
│ └── module
│ └── test
│ └── SampleFlowTest.java
└── target
├── classes
│ ├── com
│ │ └── myname
│ │ ├── partA
│ │ │ └── Aaa.class
│ │ ├── partB
│ │ │ ├── B.class
│ │ │ ├── Bb.class
│ │ │ └── Bbb.class
│ │ └── module
│ │ ├── M1.class
│ │ └── M2.class
│ └── somefile.txt
└── test-classes
├── com
│ └── myname
│ ├── partA
│ │ └── test
│ │ └── AaaTest.class
│ ├── partC
│ │ └── service
│ │ └── test
│ │ ├── BTest.class
│ │ └── BbbTest.class
│ └── module
│ └── test
│ └── SampleFlowTest.class
└── module.properties
我试过了,就像Maven: How to run a .java file from command line passing arguments说过,但它仍然不起作用。
我执行mvn exec:java -Dexec.mainClass=com.myname.module.test.SampleFlowTest
,并发生错误,结果的一部分是:
[WARNING]
java.lang.ClassNotFoundException: com.myname.module.test.SampleFlowTest
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:281)
at java.lang.Thread.run(Thread.java:745)
应该比我执行mvn exec:java -Dexec.mainClass=com.myname.module.test.SampleFlowTest
其他什么命令?
SampleFlowTest.java
运行目标test-compile
应该在src/main/java
树。
src/test/java
为单元和集成测试类。src/main/java
是用于您的应用程序的类。
SampleFlowTest
不是测试类,因为它包含一个static void main(String[] args)
方法。 测试类应包含断言,但您的类不包含它们。 相反,它包含用于启动应用程序的机制:static void main(String[] args)
MVN高管:JAVA
是正在运行的程序。所以,默认情况下,我想它会搜索src/main/java
中的执行类exec.mainClass
。
如果您不想更改布局,则可以配置exec:java
目标以使用另一个作用域作为源作用域。
mvn exec:java -Dexec.mainClass=com.myname.module.test.SampleFlowTest -Dexec.classpathScope="test"
请停止从我的答案复制!如果不通过'mvn test'或'test-compile'编译测试,你的命令将不起作用。 – Rocherlee
我没有复制任何东西,因为我没有提到你的命令。你已经告诉过你自己。 所以,请冷静下来。我编辑了我的答案,以带来精度。他们与你的回应没有任何关系。 – davidxxx
根据是否需要编译测试类,您是否适合'mvn test'。如果你使用IDE,它应该没用。与你相反,我解释了问题的原因。在第一部分中,我将讨论它的代码布局,这不是非常传统的。之后,我讨论如何绕过这个。我编辑绕过,但它与您的帖子没有任何关系。这需要时间,对不起,但它有助于人们了解问题,并提出如何绕过而不提供解释更有帮助。 – davidxxx
这是因为exec:java
不/src/test
编译测试您需要exec:java
mvn test-compile exec:java -Dexec.mainClass=com.myname.module.test.SampleFlowTest -Dexec.classpathScope=test
在您的测试类使用注释@Test上面要运行的方法:当你以这种方式运行命令,可以通过设置属性exec.classpathScope
做到这一点。 此注释来自“org.junit.Test”。然后去终端,进入项目路径。就像如果你的Maven项目名称是“SampleApp”并且它的路径是“X”。 然后转到终端中的“/ X/SampleApp”。然后执行命令“mvn clean install”,它将运行您在“/ src/test ..”中编写的所有测试用例。
要运行单个测试或测试类,请参阅this链接。
我认为'mvn exec'不会查看你的测试类路径。为什么你的测试类是'main'方法?你想运行你的单元测试吗? – Schrieveslaach