Maven 为什么我会得到;“线程中的异常”;“主要”;java.lang.NoClassDefFoundError:org/openqa/selenium/WebDriver";?
我在这里尝试了一些关于其他类似问题的建议,但没能克服这个问题。 我在尝试通过以下方式执行jar时遇到此错误: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=
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();
}
}