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

如何用-cp选项运行含多个main方法的Maven项目Jar包

多Main方法Maven项目的命令行运行方案

嘿,你的需求我完全get到了——用Maven打包项目后,通过命令行-cp参数指定不同的带main方法的类来运行,对吧?这思路非常靠谱,下面我给你一步步梳理怎么做,包括完善你的POM配置和正确的运行命令:

一、完善你的Maven POM配置

你给出的POM开头已经有基础框架了,我帮你补全关键配置,确保打包出来的Jar能支持手动指定主类的运行方式:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <!-- 替换成你自己的项目坐标 -->
    <groupId>com.xyz</groupId>
    <artifactId>myjar</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <build>
        <plugins>
            <!-- 配置maven-jar-plugin,不指定默认主类 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.3.0</version>
                <configuration>
                    <!-- 刻意留空mainClass,这样Jar不会绑定默认主类,完全由命令行指定 -->
                    <archive>
                        <manifest>
                            <mainClass/>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>

            <!-- 可选:如果项目有外部依赖,用这个插件把依赖复制到单独目录,方便运行时引用 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>3.6.0</version>
                <executions>
                    <execution>
                        <id>copy-deps</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.directory}/lib</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

二、打包你的项目

在项目根目录打开终端,执行Maven打包命令:

mvn clean package

打包完成后,你会在target/目录下找到myjar-1.0-SNAPSHOT.jar,如果配置了依赖插件,还会有一个target/lib/目录存放所有外部依赖。

三、命令行运行指定的Main方法

场景1:项目无外部依赖(或依赖已打包进Jar)

直接用你最初想到的命令就行,替换成对应的全限定类名:

# 运行DataLoader的main方法
java -cp target/myjar-1.0-SNAPSHOT.jar com.xyz.DataLoader

# 运行另一个带main方法的类,比如DataProcessor
java -cp target/myjar-1.0-SNAPSHOT.jar com.xyz.DataProcessor

场景2:项目有外部依赖

需要把依赖目录也加入类路径,注意不同系统的分隔符:

# Windows系统用分号分隔
java -cp "target/myjar-1.0-SNAPSHOT.jar;target/lib/*" com.xyz.DataLoader

# Linux/macOS用冒号分隔
java -cp "target/myjar-1.0-SNAPSHOT.jar:target/lib/*" com.xyz.DataLoader

四、小提示

  • 如果想把所有依赖打包成一个单独的“胖Jar”,可以用maven-shade-plugin,不过即使是胖Jar,依然可以用-cp指定主类运行,按需选择即可。
  • 一定要确保类的全限定名完全正确(包名+类名),不然会抛出ClassNotFoundException哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:33:03