程序在IntelliJ IDEA可运行,终端执行Jar报错:WebDriver类找不到
问题分析
你遇到的NoClassDefFoundError是因为Maven默认的maven-jar-plugin只打包了项目自身的代码,没有包含Selenium等第三方依赖。IntelliJ IDEA运行时会自动从本地Maven仓库加载依赖,所以能正常执行,但单独运行jar文件时,JVM找不到这些依赖类。
解决方案
要解决这个问题,需要使用Maven插件将所有依赖打包进一个可执行的"胖jar"里,推荐两种常用插件:
方案1:使用maven-assembly-plugin
修改你的pom.xml,将<build>部分替换为以下配置:
<build> <plugins> <!-- 指定主类信息 --> <plugin> <artifactId>maven-jar-plugin</artifactId> <version>3.2.0</version> <configuration> <archive> <manifest> <mainClass>org.example.App</mainClass> </manifest> </archive> </configuration> </plugin> <!-- 打包所有依赖到胖jar --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>3.4.2</version> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> <configuration> <archive> <manifest> <mainClass>org.example.App</mainClass> </manifest> </archive> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> </execution> </executions> </plugin> </plugins> </build>
方案2:使用maven-shade-plugin(推荐,处理依赖冲突更友好)
将pom.xml的<build>部分替换为:
<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.example.App</mainClass> </transformer> </transformers> </configuration> </execution> </executions> </plugin> </plugins> </build>
执行步骤
- 执行打包命令:
mvn clean package
- 打包完成后,在
target目录下会生成包含所有依赖的胖jar文件(比如sendmailer-1.0-SNAPSHOT-jar-with-dependencies.jar或sendmailer-1.0-SNAPSHOT.jar)。 - 运行这个胖jar:
java -jar target/[你的胖jar文件名].jar
内容的提问来源于stack exchange,提问作者zotov_l88
相关产品推荐
相关产品推荐

