如何运行从Maven下载的带全依赖的Jar包?解决运行报错问题
解决JMRTD Jar运行报错及依赖整合问题
1. 修复"找不到主类"的CMD运行错误
你当前的命令写法有误,Java把jar文件名当成主类名去查找,才会抛出ClassNotFoundException。正确的运行命令必须加上-jar参数:
java -jar jmrtd-0.7.36.jar
注意要确保命令执行目录与jar文件所在目录一致,或者直接指定jar的完整绝对路径。
2. 处理依赖缺失问题
JMRTD jar并非独立可执行包,它依赖BC加密库、SLF4J日志库等第三方组件,直接双击或单独运行会因依赖缺失失败,两种常用解决方式如下:
方式一:手动整理依赖并指定类路径
- 从Maven仓库下载JMRTD的所有依赖包(可通过Maven Central查询jmrtd的完整依赖列表),将所有依赖jar与jmrtd-0.7.36.jar放在同一文件夹下。
- 使用
-cp(类路径)参数运行,命令格式如下:
java -cp "jmrtd-0.7.36.jar;*.jar" <主类全限定名>
注:Windows系统用;分隔类路径,Linux/macOS用:;主类名可查看jar包内META-INF/MANIFEST.MF文件的Main-Class字段,JMRTD的主类通常为org.jmrtd.app.JMRTDApp
方式二:用Maven打包成包含所有依赖的可执行Jar
如果你的项目基于Maven管理,可在pom.xml中添加插件配置,打包时自动整合所有依赖:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.4.1</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>org.jmrtd.app.JMRTDApp</mainClass> </transformer> </transformers> </configuration> </execution> </executions> </plugin> </plugins> </build>
执行mvn package后,target目录下会生成带-shaded后缀的jar包,该包包含所有依赖,直接用java -jar命令运行即可,双击也能正常启动。
内容的提问来源于stack exchange,提问作者ZeroNoc
相关产品推荐
相关产品推荐

