Maven 为什么我会得到;“线程中的异常”;“主要”;java.lang.NoClassDefFoundError:org/openqa/selenium/WebDriver";?

Maven 为什么我会得到;“线程中的异常”;“主要”;java.lang.NoClassDefFoundError:org/openqa/selenium/WebDriver";?,maven,selenium-webdriver,maven-3,Maven,Selenium Webdriver,Maven 3,我在这里尝试了一些关于其他类似问题的建议,但没能克服这个问题。 我在尝试通过以下方式执行jar时遇到此错误: java -jar AutoHotRouter-1.0.jar 鉴于以下pom.xml,我在这里遗漏了什么 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=

我在这里尝试了一些关于其他类似问题的建议,但没能克服这个问题。 我在尝试通过以下方式执行jar时遇到此错误:

java -jar AutoHotRouter-1.0.jar
鉴于以下pom.xml,我在这里遗漏了什么

<?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.ttt</groupId>
    <artifactId>AutoHotRouter</artifactId>
    <version>1.0</version>
    <packaging>jar</packaging>

    <name>AutoHotRouter</name>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.11.2</version>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-api</artifactId>
            <version>2.53.1</version>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-chrome-driver</artifactId>
            <version>2.53.1</version>
        </dependency>
    </dependencies>

    <build>
        <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
            <plugins>
                <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
                <plugin>
                    <artifactId>maven-clean-plugin</artifactId>
                    <version>3.1.0</version>
                </plugin>
                <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
                <plugin>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>3.0.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.8.0</version>
                </plugin>
                <plugin>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.22.1</version>
                </plugin>
                <plugin>
                    <artifactId>maven-install-plugin</artifactId>
                    <version>2.5.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-deploy-plugin</artifactId>
                    <version>2.8.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-site-plugin</artifactId>
                    <version>3.7.1</version>
                </plugin>
                <plugin>
                    <artifactId>maven-project-info-reports-plugin</artifactId>
                    <version>3.0.0</version>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
</project>
然后

java -jar AutoHotRouter.jar 
我得到:

线程“main”java.lang.NoClassDefFoundError中出现异常: org/openqa/selenium/WebDriver

然后,我删除了以前的插件,首先添加了maven assembly插件,因为它对我不起作用,我用maven shade插件替换了它:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>3.3.0</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <mainClass>com.ttt.App</mainClass>
                    </manifest>
                </archive>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
        </execution>
    </executions>
</plugin>

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <executions>
        <execution>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <shadedArtifactAttached>true</shadedArtifactAttached>
                <transformers>
                    <transformer implementation=
                                         "org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                        <mainClass>com.ttt.App</mainClass>
                    </transformer>
                </transformers>
            </configuration>
        </execution>
    </executions>
</plugin>
然后

java -jar AutoHotRouter-1.0.jar
我得到:

没有主清单属性

我也试过了

mvn clean compile assembly:single
与 maven汇编插件

然后我得到:

读取程序集时出错:找不到程序集描述符


谢谢

这只是一个假设,因为pom目前看起来不错。有点可疑的部分是jar插件:

<plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-jar-plugin</artifactId>
      <version>2.1</version>
      <configuration>
      ...
主类

package org.example;

import org.openqa.selenium.chrome.ChromeDriver;

public class StartMain {

  public static void main(String[] args) {
    System.setProperty("webdriver.chrome.driver", "C:/Program Files/Google/Chrome/Application/chrome.exe");

    ChromeDriver driver = new ChromeDriver();
  }
}
然后
mvn包
java-jar./target/hotwrouter-1.0-SNAPSHOT.jar
打开chrome。您的配置几乎相同(我认为只缺少shade插件的阶段配置)


在pom的
部分中包含shade插件非常重要,因为它不是pom的一部分。
部分用于配置版本和配置的默认值。看见因此,如果仅在该部分,其他插件将不会自动启用。

谢谢@wemu。我添加了shade插件:org.apache.maven.pluginsmaven-shade-plugin3.2.4packageshade。我仍然会犯同样的错误。我应该以不同的方式配置插件吗?这完全取决于你如何运行这个构建。您的selenium依赖项在pom.xml中没有常见的测试范围。shade插件用于将生产源代码打包到可执行的jar中。它不包括测试源。因此,这也取决于您将测试放在何处(通常是src/test/maven,但这通常不包括在shade插件中)。maven构建是否会导致相同的异常?或者您实际上是想通过可执行jar来运行它吗?这对于运行测试来说也不是很常见。谢谢@wemu。实际上,我使用Selenium只是为了自动化Chrome,而根本不用于测试。Maven(mvn清理安装)成功。java-jaraaa.jar给出了错误…我在问题中添加了更多信息“mvn包”是否创建了uber jar?在目标文件夹中应该有一个较大的文件夹和一个“original-.jar”文件夹。shade插件的执行可能还需要目标部分附近的包。您也不需要为jar插件配置主类,因为shade插件将为uber jar配置主类。
mvn clean compile assembly:single
<plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-jar-plugin</artifactId>
      <version>2.1</version>
      <configuration>
      ...
<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>org.example</groupId>
<artifactId>HotRouter</artifactId>
<version>1.0-SNAPSHOT</version>

<name>HotRouter</name>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>
</properties>

<dependencies>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>3.141.59</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.14.0</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.2.4</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.StartMain</mainClass>
                            </transformer>
                        </transformers>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
package org.example;

import org.openqa.selenium.chrome.ChromeDriver;

public class StartMain {

  public static void main(String[] args) {
    System.setProperty("webdriver.chrome.driver", "C:/Program Files/Google/Chrome/Application/chrome.exe");

    ChromeDriver driver = new ChromeDriver();
  }
}