无法在Java 11中独立构建Selenium

我正在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

以上是 无法在Java 11中独立构建Selenium 的全部内容, 来源链接: utcz.com/qa/413358.html

回到顶部