要用 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


常见问题排查

  1. ClassNotFoundException / NoClassDefFoundError

    • 先 mvn clean compile
    • 确认 package 与 mainClass 完全一致;
    • 如果是 module-info.java(JPMS),确保模块导出 exports 并正确依赖。
  2. 找不到依赖

    • 执行 mvn dependency:resolve
    • 或使用可执行 JAR(带依赖)方式运行。
  3. Windows 参数解析问题

    • 用引号包裹:"-Dexec.args=a b c"
    • PowerShell 与 cmd 的引号规则不同,尽量用 PowerShell 并加引号。
  4. 编码与控制台乱码

    • 加 JVM 参数:-Dfile.encoding=UTF-8
    • 在 exec-maven-plugin 的 <commandlineArgs> 或 systemProperties 设置。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐