mvn 执行java main函数
mvn 执行java main函数
要用 Maven 执行 Java 的 main 函数,最常用的是 exec-maven-plugin。下面给你几种方式(适合普通 Java 项目、Spring Boot 项目、多模块项目等)。
方式一:临时命令(无需改 pom.xml)
适用于已经能 mvn compile 的项目。
Shell
# Linux / macOS
mvn -q exec:java -Dexec.mainClass=com.example.Main -Dexec.args="arg1 arg2"
注意: 命令行一定要引号
注意: 命令行一定要引号
注意: 命令行一定要引号
# Windows PowerShell
mvn -q exec:java "-Dexec.mainClass=com.example.Main" "-Dexec.args=arg1 arg2"
说明:
-q静默输出可省略;-Dexec.args可以传入你的命令行参数;- 如果是多模块工程,需要在含有
main()的模块目录下执行。




<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version> <!-- Or a later version -->
<configuration>
<source>11</source> <!-- Or 11 -->
<target>11</target> <!-- Or 11 -->
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>3.5.0</version> <!-- Use the latest version -->
<configuration>
<mainClass>org.example.Main</mainClass>
<!-- <mainClass>src.test.java.org.api_test.channel.MustHaveApiTest</mainClass>-->
</configuration>
</plugin>
</plugins>
</build>
方式二:在 pom.xml 配置插件(推荐)
一次配置,后面直接命令执行。
XML
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>com.example.Main</mainClass>
<!-- 可选:传参 -->
<arguments>
<argument>arg1</argument>
<argument>arg2</argument>
</arguments>
<!-- 可选:JVM参数 -->
<systemProperties>
<systemProperty>
<key>env</key>
<value>dev</value>
</systemProperty>
</systemProperties>
</configuration>
</plugin>
</plugins>
Show more lines
执行:
Shell
mvn exec:java
动态传参覆盖
Shell
mvn exec:java -Dexec.mainClass=com.example.Main -Dexec.args="foo bar" -Denv=prod
方式三:Spring Boot 项目
如果是 Spring Boot(有 spring-boot-starter):
Shell
mvn spring-boot:run
传参:
Shell
方式四:用 java -cp 直接运行(不依赖插件)
先打包,再用 java 运行:
Shell
# 构建
mvn -q -DskipTests package
# Linux / macOS:注意使用 ':' 分隔 classpath
java -cp target/classes:$(dependency_location) com.example.Main arg1 arg2
# Windows:classpath 用 ';' 分隔
java -cp target/classes;[依赖路径] com.example.Main arg1 arg2
更简单的方式是把依赖打到一个可执行 JAR:
XML
<!-- 使用 maven-assembly-plugin 生成带所有依赖的可执行JAR -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.6.0</version>
<configuration>
<archive>
<manifest>
<mainClass>com.example.Main</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
Show more lines
打包并运
Shell
mvn -DskipTests package
java -jar target/your-artifact-jar-with-dependencies.jar arg1 arg2
Spring Boot 使用
spring-boot-maven-plugin打可执行 JAR:
Shell
mvn -DskipTests package
java -jar target/your-app-*.jar
多模块项目的注意点
- 在包含
main()的 子模块目录 执行mvn exec:java。 - 如果
main在app模块:Shell
cd app
常见问题排查
-
ClassNotFoundException / NoClassDefFoundError
- 先
mvn clean compile; - 确认
package与mainClass完全一致; - 如果是
module-info.java(JPMS),确保模块导出exports并正确依赖。
- 先
-
找不到依赖
- 执行
mvn dependency:resolve; - 或使用可执行 JAR(带依赖)方式运行。
- 执行
-
Windows 参数解析问题
- 用引号包裹:
"-Dexec.args=a b c"; - PowerShell 与 cmd 的引号规则不同,尽量用 PowerShell 并加引号。
- 用引号包裹:
-
编码与控制台乱码
- 加 JVM 参数:
-Dfile.encoding=UTF-8; - 在
exec-maven-plugin的<commandlineArgs>或systemProperties设置。
- 加 JVM 参数:
更多推荐

所有评论(0)