如何通过maven运行java文件?
如何通过maven执行如何通过maven运行java文件?,java,maven,Java,Maven,如何通过maven执行SampleFlowTest.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[] arg
SampleFlowTest.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
我已经试过了,但还是不行
我执行了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
,我应该执行什么命令?这是因为exec:java
没有在/src/test
中编译测试
在exec:java
mvn test-compile exec:java -Dexec.mainClass=com.myname.module.test.SampleFlowTest -Dexec.classpathScope=test
这是因为
exec:java
没有在/src/test
在exec:java
mvn test-compile exec:java -Dexec.mainClass=com.myname.module.test.SampleFlowTest -Dexec.classpathScope=test
SampleFlowTest.java
应该位于src/main/java
树中。
用于单元和集成测试类src/test/java
用于应用程序使用的类src/main/java
SampleFlowTest
不是测试类,因为它包含一个静态void main(String[]args)
方法。
测试类应该包含断言,但您的类不包含它们。
相反,它包含用于启动应用程序的机制:staticvoidmain(String[]args)
mvnexec:java
用于运行程序。因此,默认情况下,我猜它在src/main/java
中搜索执行类exec.mainClass
如果不想更改布局,可以将exec:java
目标配置为使用另一个与源作用域相同的作用域。可以通过以下方式运行命令时设置属性exec.classpathScope
:
mvn exec:java -Dexec.mainClass=com.myname.module.test.SampleFlowTest -Dexec.classpathScope="test"
SampleFlowTest.java
应该位于src/main/java
树中。
用于单元和集成测试类src/test/java
用于应用程序使用的类src/main/java
SampleFlowTest
不是测试类,因为它包含一个静态void main(String[]args)
方法。
测试类应该包含断言,但您的类不包含它们。
相反,它包含用于启动应用程序的机制:staticvoidmain(String[]args)
mvnexec:java
用于运行程序。因此,默认情况下,我猜它在src/main/java
中搜索执行类exec.mainClass
如果不想更改布局,可以将exec:java
目标配置为使用另一个与源作用域相同的作用域。可以通过以下方式运行命令时设置属性exec.classpathScope
:
mvn exec:java -Dexec.mainClass=com.myname.module.test.SampleFlowTest -Dexec.classpathScope="test"
在测试类中,使用您想要运行的方法上面的annotation@test。 此注释来自“org.junit.Test”。然后转到终端,转到项目路径。就像maven项目名为“SampleApp”,路径为“X”。 然后转到终端中的“/X/SampleApp”。然后执行命令“mvn clean install”,它将运行您在“/src/test..”中编写的所有测试用例
要运行单个测试或测试类,请参阅链接。在您的测试类中,使用您想要运行的方法上面的annotation@test。 此注释来自“org.junit.Test”。然后转到终端,转到项目路径。就像maven项目名为“SampleApp”,路径为“X”。 然后转到终端中的“/X/SampleApp”。然后执行命令“mvn clean install”,它将运行您在“/src/test..”中编写的所有测试用例
有关运行单个测试或测试类的信息,请参阅链接。我认为
mvn exec
不会查看您的测试类路径。为什么您的测试类amain
方法?是否要运行单元测试?我认为mvn exec
不会查看测试类路径。为什么您的测试类amain
方法?是否要运行单元测试?请停止复制我的答案!如果没有通过mvn test
或test compile
编译测试,您的命令将无法工作。我没有复制任何内容,因为我没有引用您的命令。你已经告诉自己了。所以,请冷静下来。我编辑了我的答案,以提高准确性。它们与您的响应无关。根据是否需要编译测试类,您可以进行mvn测试。如果您使用IDE,它应该是无用的。与你相反,我解释了问题的原因。在第一部分中,我讨论了它的代码布局,它不是很常规。之后,我将讨论如何绕过这一点。我编辑了旁路,但它与你的帖子无关。抱歉,这需要时间,但这有助于人们理解问题,建议如何绕过而不做解释更有用。你和我同时发布了答案。9分钟后,您添加了旁路部分,其中也包括我的答案。最初您没有使用-Dexec.classpathScope=“test”
的想法。据我所见,您最初的解决方案是将main()移动到/src/main/java
。是的,我只提供了快速解决方案,因为他/她只要求一个工作命令。无论如何,我很感谢你在这里给出的详细答案。我不想发帖。我已经发布了,因为你已经发布了。否则可能会给人留下我抄袭的印象。因为,我没有完成我的答案,然后我编辑了终止它。这就是全部。所以,如果你想玩游戏,请:快,快,快,你可以。但不要侮辱和指责那些能给出完整答案的人。这是不礼貌的。这是我最后的答案。我们不会在5小时内讨论这个问题。请停止抄袭我的答案!如果不通过mvn test
或test compile
编译测试,您的命令将无法工作。I