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

Maven命令行构建失败Eclipse成功,运行Jar遇Null及NoSuchMethodError

Maven项目Eclipse构建成功但命令行执行Jar报错的解决方案

一、java -jar命令的正确性说明

java -jar命令本身是正确的,但必须满足两个前提:

  • Maven打包时已在pom.xml中指定主类,示例配置:
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>3.3.0</version>
        <configuration>
            <archive>
                <manifest>
                    <mainClass>com.yourpackage.YourMainClass</mainClass>
                    <addClasspath>true</addClasspath>
                    <classpathPrefix>lib/</classpathPrefix>
                </manifest>
            </archive>
        </configuration>
    </plugin>
    
  • 依赖需正确处理:要么用maven-shade-plugin把所有依赖打包进Jar,要么把依赖放在Jar同目录的lib文件夹下(配合上述addClasspath配置)。

二、解决NoSuchMethodError(依赖兼容问题)

这个错误源于Selenium 3.141.59、Guava 25.0-jre和Java 17的版本冲突:

  • Guava 25.0-jre是2018年的版本,不支持Java 17的模块化特性,部分方法签名在高版本Java中已变更,导致方法找不到。
  • 修复步骤:
    1. 在pom.xml中明确指定支持Java 17的Guava版本(比如31.1-jre,适配Selenium 3.141.59):
      <dependency>
          <groupId>com.google.guava</groupId>
          <artifactId>guava</artifactId>
          <version>31.1-jre</version>
      </dependency>
      
    2. 排除Selenium自带的低版本Guava依赖,避免冲突:
      <dependency>
          <groupId>org.seleniumhq.selenium</groupId>
          <artifactId>selenium-java</artifactId>
          <version>3.141.59</version>
          <exclusions>
              <exclusion>
                  <groupId>com.google.guava</groupId>
                  <artifactId>guava</artifactId>
              </exclusion>
          </exclusions>
      </dependency>
      
    3. 执行mvn clean install重新构建,确保依赖更新生效。

三、解决this.driver空指针问题

空指针的核心是驱动初始化失败,常见场景及修复:

  • 命令行未配置驱动路径:Eclipse中可能通过运行配置设置了webdriver.chrome.driver等系统属性,但命令行运行时未传递。解决方法:
    运行Jar时添加系统参数:
    java -Dwebdriver.chrome.driver=/path/to/chromedriver.exe -jar your-jar-file.jar
    
    或者用WebDriverManager自动管理驱动(推荐):
    添加依赖到pom.xml:
    <dependency>
        <groupId>io.github.bonigarcia</groupId>
        <artifactId>webdrivermanager</artifactId>
        <version>5.3.3</version>
    </dependency>
    
    代码中初始化驱动:
    WebDriverManager.chromedriver().setup();
    this.driver = new ChromeDriver();
    
  • Jar打包未包含驱动文件:如果驱动文件放在项目资源目录,需确保Maven打包时包含:
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
        <version>3.3.1</version>
        <configuration>
            <includeEmptyDirs>true</includeEmptyDirs>
            <resources>
                <resource>
                    <directory>src/main/resources</directory>
                    <includes>
                        <include>**/*</include>
                    </includes>
                </resource>
            </resources>
        </configuration>
    </plugin>
    
  • 工作目录不一致:命令行运行时的工作目录和Eclipse不同,导致相对路径读取驱动失败。解决方法:改用绝对路径,或通过Class.getResourceAsStream()读取资源文件。

四、命令行构建运行验证步骤

  1. 执行mvn clean package确保构建无报错;
  2. 进入Jar所在目录,按要求添加参数后运行java -jar your-jar-file.jar;
  3. 若仍报错,查看完整堆栈信息,定位具体类或方法的冲突点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 13:16:08