当前位置: 首页 > 面试题库 >

无法在Java 11中独立构建Selenium

淳于飞鸾
2023-03-14
问题内容

我正在Eclipse 2018-12中使用Java11构建Java Selenium独立应用程序,但构建失败:

java.lang.module.FindException:无法派生\ selenium-server-
standalone-3.141.59.jar的模块描述符

我一直在研究最新版本的Java中如何定义模块依赖关系,因为到目前为止我仅使用版本8。

module-info.java:

module main {
    requires org.openqa.selenium.core;
}

mainClass:

package main;

import org.openqa.selenium.WebDriver;

public class DownloadDocuments {

    public static void main(String[] args) {
        System.out.println("hello!");
        WebDriver driver;
    }

}

使用模块时是否需要任何其他配置步骤?

堆栈跟踪

java.lang.module.FindException: Unable to derive module descriptor for \selenium-server-standalone-3.141.59.jar
    at java.base/jdk.internal.module.ModulePath.readJar(ModulePath.java:647)
    at java.base/jdk.internal.module.ModulePath.readModule(ModulePath.java:330)
    at java.base/jdk.internal.module.ModulePath.scan(ModulePath.java:236)
    at java.base/jdk.internal.module.ModulePath.scanNextEntry(ModulePath.java:189)
    at java.base/jdk.internal.module.ModulePath.findAll(ModulePath.java:165)
    at java.base/java.lang.module.ModuleFinder$2.lambda$findAll$2(ModuleFinder.java:368)
    at java.lang.module.ModuleFinder$2$$Lambda$22.00000000DB437580.apply(Unknown Source)
    at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:271)
    at java.base/java.util.AbstractList$RandomAccessSpliterator.forEachRemaining(AbstractList.java:720)
    at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:499)
    at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:489)
    at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
    at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
    at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:241)
    at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:497)
    at java.base/java.lang.module.ModuleFinder$2.findAll(ModuleFinder.java:369)
    at java.base/java.lang.module.Resolver.findAll(Resolver.java:841)
    at java.base/java.lang.module.Resolver.bind(Resolver.java:223)
    at java.base/java.lang.module.Configuration.resolveAndBind(Configuration.java:304)
    at java.base/java.lang.module.ModuleDescriptor$1.resolveAndBind(ModuleDescriptor.java:2735)
    at java.base/jdk.internal.module.ModuleBootstrap.boot(ModuleBootstrap.java:337)
    at java.base/java.lang.ClassLoader.initializeClassLoaders(ClassLoader.java:217)
    at java.base/java.lang.Thread.initialize(Thread.java:422)
    at java.base/java.lang.Thread.<init>(Thread.java:153)
Caused by: java.lang.module.InvalidModuleDescriptorException: Provider class org.eclipse.jetty.http.Http1FieldPreEncoder not in module
    at java.base/jdk.internal.module.ModulePath.deriveModuleDescriptor(ModulePath.java:554)
    at java.base/jdk.internal.module.ModulePath.readJar(ModulePath.java:643)
    ... 23 more

问题答案:

这是由于.jar文件中的错误。它包含一个META- INF/services/org.eclipse.jetty.http.HttpFieldPreEncoder条目,根据jar服务提供商接口规范,该条目必须在实现该接口的同一.jar文件中包含一个类的名称org.eclipse.jetty.http.HttpFieldPreEncoder

但是,作为例外情况,该服务描述符文件包含org.eclipse.jetty.http.Http1FieldPreEncoder.jar文件中不存在的类。

但是,org.seleniumhq.jetty9.http.Http1FieldPreEncoder.jar中有一个类。

解决此问题的最简单方法是:

  • 将整个.jar提取到一个临时目录。
  • 进行更改META-INF/services/org.eclipse.jetty.http.HttpFieldPreEncoder,使其包含单行org.seleniumhq.jetty9.http.Http1FieldPreEncoder
  • 从更改的内容创建一个新的.jar文件。

如果您不在Windows中,则可以在命令行上执行此操作:

mkdir -p META-INF/services
echo org.seleniumhq.jetty9.http.Http1FieldPreEncoder > META-INF/services/org.eclipse.jetty.http.HttpFieldPreEncoder
zip -u -m selenium-server-standalone-3.141.59.jar META-INF/services/org.eclipse.jetty.http.HttpFieldPreEncoder
rm -r META-INF


 类似资料:
  • 我正在使用Eclipse 2018-12中的Java11构建一个Java Selenium独立应用程序,但我的构建失败了: findException:无法派生\selenium-server-standalone-3.141.59.jar的模块描述符 使用模块时是否需要其他配置步骤? stacktrace

  • 我在htmlunitdriver.java文件中做了一个补丁,如下文所述:使用WebDriver(HtmlUnit,Ruby绑定)时是否可能忽略JavaScript异常 我已经学习了关于selenium build wiki和自述文件中的说明,以及这里给出的技巧:构建selenium服务器项目 但是,我没有一个像selenium-server-standalone-2.25.0.jar这样的jar

  • 在我的mac上使用Maven构建时,在< code>mvn install上,我得到 [警告]使用平台编码(实际上是MacRoman)来复制过滤的资源,即构建取决于平台! 是否可以为给定平台 (Linux) 构建或以其他方式独立于构建平台?

  • 问题内容: 在我的VPS上启动selenium独立服务器时遇到麻烦 输出: 此后没有更多输出。在本地,相同的命令就像一个超级按钮一样工作。任何提示如何解决此问题? 爪哇 更新1 该服务根本不在任何端口上运行 Netstat输出 更新2 好的,这里的主要问题是selenium服务器在启动时卡住了,我不知道为什么。我销毁了我的VPS机器并从头开始。selenium服务器启动一次,在我停止并再次启动后,

  • 我是Selenium IDE的初学者。添加了插件,并试图运行一个测试用例。它向我显示了下面的错误消息。 因此,我下载了必要的jar文件,并执行下面的命令java-jar selenium-server-standalone-2.28.0。jar[替换为下载的最新版本] 收到的信息如下:该怎么办? selenium-server-standalone-3.0.1。罐子 Java版本java版本"1.

  • 在本章节中,我们将学习如何为 Docusaurus 创建独立页面(pages)。 这对于创建类似展示页面、练习页面或支持页面等 非经常修改的独立页面 非常有用。 独立页面的功能由 @docusaurus/plugin-content-pages 插件提供。 你可以使用 React 组件或 Markdown 来创建独立页面。 note 独立页面是没有侧边栏的,只有 文档(即 docs 目录下的文件)