我正在用selenium和javaFX开发一些小程序。当我分别在一个项目和一个JavaFX项目上尝试我的代码时,一切都很顺利。当我把代码放在一起,导入所有依赖项到maven,并试图运行时,它一直显示以下错误:
[ERROR] COMPILATION ERROR :[INFO] -------------------------------------------------------------[ERROR] module not found: processed.jcommander[ERROR] module not found: processed.async.http.client
我不知道这些模块是什么,它们不是依赖项,也没有在代码中使用。这些模块是什么,为什么编译错误?
下面是我的POM.xml:
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>DedoDoDida</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>19</maven.compiler.source>
<maven.compiler.target>19</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>io.github.bonigarcia</groupId>
<artifactId>webdrivermanager</artifactId>
<version>5.3.1</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.7.1</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.projectlombok</groupId>-->
<!-- <artifactId>lombok</artifactId>-->
<!-- <version>1.18.6</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>com.google.code.gson</groupId>-->
<!-- <artifactId>gson</artifactId>-->
<!-- <version>2.10</version>-->
<!-- </dependency>-->
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>20-ea+11</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>20-ea+11</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<release>19</release>
</configuration>
</plugin>
<plugin>
<groupId>org.openjfx</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>0.0.6</version>
<executions>
<execution>
<!-- Default configuration for running -->
<!-- Usage: mvn clean javafx:run -->
<id>default-cli</id>
<configuration>
<mainClass>org.example.App</mainClass>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
我试着已经在互联网上搜索,我已经在这个问题上停留了2天,我放弃了这个项目,但我决定尝试stackoverflow。可能是一些简单的事情来解决,我不能解决。
1条答案
按热度按时间n9vozmp41#
发生这种情况是因为您正在使用的Selenium软件的
4.7.1
版本所使用的Java平台模块定义(在我看来)似乎已损坏。我正在使用您的应用程序中的pom.xml进行更新:
还有hello world program from the selenium documentation。
据我所知(我真的找不到这方面的文档),所以可能目前还不支持,要在模块化应用程序中使用Selenium,您需要在
module-info.java
中包含以下模块,这些模块是我的IDE在尝试编译上述程序时建议的。完成后,随后的
mvn:compile
将给出问题中的错误:这些模块不在selenium的可传递依赖项中,因此selenium模块被破坏。工件上存在maven依赖项,因此您可以在Maven引入的库依赖项中看到jcommander和async-http-client jar,但是这些jar不提供任何模块信息。因此它们的模块名应该从jar文件名中派生出来,作为“自动模块”。这意味着它们将从
module-info.java
中引用为:但它们不使用这些名称引用。
selenium chrome 合金驱动罐具有:
selenium 遥控器罐,具有:
这些名称是错误的,带有
processed.
前缀的模块不存在,因此如果定义module-info.java
,简单的HelloSelenium
应用程序将不可用。现在我唯一能建议的解决方法是通过***而不是**定义
module-info.java
(即,如果项目中有module-info.java
文件,则删除该文件)来使应用程序非模块化。但是,由于JavaFX需要位于模块路径上,因此您还需要执行以下操作之一:
1.使用包含JavaFX的JDK(例如,liberica的“Full JDK”),( 这是我推荐的选项 *)或
1.添加VM选项以设置模块路径,并在编译和执行时添加JavaFX模块(如www.example.com中所指定openjfx.io)。
我还建议selenium项目的filing a bug修复selenium-remote-driver jar中损坏的模块定义。