如何通过maven运行java文件?

如何通过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

如何通过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[] 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
不会查看您的测试类路径。为什么您的测试类a
main
方法?是否要运行单元测试?我认为
mvn exec
不会查看测试类路径。为什么您的测试类a
main
方法?是否要运行单元测试?请停止复制我的答案!如果没有通过
mvn test
test compile
编译测试,您的命令将无法工作。我没有复制任何内容,因为我没有引用您的命令。你已经告诉自己了。所以,请冷静下来。我编辑了我的答案,以提高准确性。它们与您的响应无关。根据是否需要编译测试类,您可以进行
mvn测试。如果您使用IDE,它应该是无用的。与你相反,我解释了问题的原因。在第一部分中,我讨论了它的代码布局,它不是很常规。之后,我将讨论如何绕过这一点。我编辑了旁路,但它与你的帖子无关。抱歉,这需要时间,但这有助于人们理解问题,建议如何绕过而不做解释更有用。你和我同时发布了答案。9分钟后,您添加了旁路部分,其中也包括我的答案。最初您没有使用
-Dexec.classpathScope=“test”
的想法。据我所见,您最初的解决方案是将main()移动到
/src/main/java
。是的,我只提供了快速解决方案,因为他/她只要求一个工作命令。无论如何,我很感谢你在这里给出的详细答案。我不想发帖。我已经发布了,因为你已经发布了。否则可能会给人留下我抄袭的印象。因为,我没有完成我的答案,然后我编辑了终止它。这就是全部。所以,如果你想玩游戏,请:快,快,快,你可以。但不要侮辱和指责那些能给出完整答案的人。这是不礼貌的。这是我最后的答案。我们不会在5小时内讨论这个问题。请停止抄袭我的答案!如果不通过
mvn test
test compile
编译测试,您的命令将无法工作。I