selenium Intellij上的Maven出现编译错误:未找到模块:processed.jcommander

bq9c1y66  于 2022-12-23  发布在  Maven
关注(0)|答案(1)|浏览(360)

我正在用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。可能是一些简单的事情来解决,我不能解决。

n9vozmp4

n9vozmp41#

发生这种情况是因为您正在使用的Selenium软件的4.7.1版本所使用的Java平台模块定义(在我看来)似乎已损坏。
我正在使用您的应用程序中的pom.xml进行更新:

  • javafx-maven插件的当前版本是0.0.8。
  • JavaFX当前的非早期访问(版本中没有-ea)是19。

还有hello world program from the selenium documentation

package dev.selenium.hello;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class HelloSelenium {
    public static void main(String[] args) {
        WebDriver driver = new ChromeDriver();

        driver.get("https://selenium.dev");

        driver.quit();
    }
}

据我所知(我真的找不到这方面的文档),所以可能目前还不支持,要在模块化应用程序中使用Selenium,您需要在module-info.java中包含以下模块,这些模块是我的IDE在尝试编译上述程序时建议的。

requires org.seleniumhq.selenium.api;
requires org.seleniumhq.selenium.chrome_driver;

完成后,随后的mvn:compile将给出问题中的错误:

[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] module not found: processed.jcommander
[ERROR] module not found: processed.async.http.client

这些模块不在selenium的可传递依赖项中,因此selenium模块被破坏。工件上存在maven依赖项,因此您可以在Maven引入的库依赖项中看到jcommander和async-http-client jar,但是这些jar不提供任何模块信息。因此它们的模块名应该从jar文件名中派生出来,作为“自动模块”。这意味着它们将从module-info.java中引用为:

requires jcommander;
requires async.http.client;

但它们不使用这些名称引用。
selenium chrome 合金驱动罐具有:

module org.seleniumhq.selenium.chrome_driver {
    ...
    requires org.seleniumhq.selenium.remote_driver;
    ...
}

selenium 遥控器罐,具有:

module org.seleniumhq.selenium.remote_driver {
    ...
    requires processed.async.http.client;
    requires processed.jcommander;
    ...
}

这些名称是错误的,带有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中损坏的模块定义。

  • 注意:我不知道selenium项目错误报告过程是如何工作的,所以我猜测问题链接,它可能是这个错误的其他东西,但我的建议是尝试。
  • 在提交错误报告时,您可以链接回此帖子。
  • 如果您提交错误报告,请通过编辑此答案或发表评论在此处发布指向它的链接。

相关问题