You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过exec-maven-plugin在Maven中运行单个Java源文件?

借助exec-maven-plugin实现Java 11直接运行单个源文件的功能

可以实现。自Java 11起,java命令支持直接运行未编译的.java源文件,而exec-maven-plugin的核心作用就是在Maven生命周期中调用系统命令,因此我们可以通过配置该插件来复用这个Java特性。

基本配置示例

在项目的pom.xml中添加如下插件配置,即可通过Maven命令直接运行指定的单个源文件:

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>3.1.0</version> <!-- 使用最新稳定版本 -->
            <executions>
                <execution>
                    <id>run-single-source</id>
                    <goals>
                        <goal>exec</goal>
                    </goals>
                    <phase>compile</phase> <!-- 可根据需求调整执行阶段,比如verify、package等 -->
                    <configuration>
                        <executable>java</executable>
                        <arguments>
                            <!-- 指定要运行的源文件路径 -->
                            <argument>src/main/java/com/example/MyMain.java</argument>
                        </arguments>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

执行时只需运行:

mvn exec:exec@run-single-source

带依赖的场景处理

如果目标源文件依赖外部库或其他本地类,需要在arguments中添加类路径参数,将依赖资源纳入运行环境:

<arguments>
    <argument>-cp</argument>
    <argument>${project.build.directory}/classes:${project.build.directory}/dependency/*</argument>
    <argument>src/main/java/com/example/MyMain.java</argument>
</arguments>

注:${project.build.directory}/classes是项目编译后的类文件目录,${project.build.directory}/dependency/*是通过maven-dependency-plugin下载的外部依赖jar包目录(需提前配置该插件将依赖复制到指定目录)。

关键注意事项

  • 确保Maven使用的JDK版本为11或更高,可通过maven-compiler-plugin指定:
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.11.0</version>
        <configuration>
            <source>11</source>
            <target>11</target>
        </configuration>
    </plugin>
    
  • 单个源文件中若包含公共类,文件名必须与公共类名一致;非公共类则无强制要求,但建议遵循命名规范以避免混淆。
  • 若不需要绑定到Maven生命周期,可直接通过命令行临时指定运行参数,无需在pom.xml中配置execution:
    mvn exec:exec -Dexec.executable=java -Dexec.args="src/main/java/com/example/MyMain.java"
    

内容的提问来源于stack exchange,提问作者fbenoit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 15:45:44