如何用-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
相关产品推荐
相关产品推荐

