【问题标题】:Unable generating module-info for legacy jar via jdeps using Java 11无法使用 Java 11 通过 jdeps 为遗留 jar 生成模块信息
【发布时间】:2019-08-15 22:12:52
【问题描述】:

我需要为遗留 jar 生成 module-info 文件,该文件名为: selenium-chrome-driver-3.141.59.jar 使用命令:

jdeps --module-path modules --generate-module-info out selenium-chrome-driver-3.141.59.jar

但我得到了结果:

Missing dependence: C:\...\selenium.chrome.driver\module-info.java not generated
Error: missing dependencies
   org.openqa.selenium.chrome.ChromeDriver            -> com.google.common.collect.ImmutableMap             not found
   org.openqa.selenium.chrome.ChromeDriver            -> org.openqa.selenium.Capabilities                   not found
   org.openqa.selenium.chrome.ChromeDriver            -> org.openqa.selenium.WebDriverException             not found
   org.openqa.selenium.chrome.ChromeDriver            -> org.openqa.selenium.html5.LocalStorage             not found
   org.openqa.selenium.chrome.ChromeDriver            -> org.openqa.selenium.html5.Location                 not found
   org.openqa.selenium.chrome.ChromeDriver            -> org.openqa.selenium.html5.LocationContext          not found
   org.openqa.selenium.chrome.ChromeDriver            -> org.openqa.selenium.html5.SessionStorage           not found
   org.openqa.selenium.chrome.ChromeDriver            -> org.openqa.selenium.html5.WebStorage               not found
   org.openqa.selenium.chrome.ChromeDriver            -> org.openqa.selenium.interactions.HasTouchScreen    not found
...

我尝试过提到herehere

jdeps --module-path modules --add-modules=ALL-MODULE-PATH --generate-module-info out selenium-chrome-driver-3.141.59.jar

然后我得到同样的错误。

作为替代方法,我尝试添加单独的模块,例如:

jdeps --module-path modules --add-modules  org.openqa.selenium.chrome,org.openqa.selenium.remote --generate-module-info out selenium-chrome-driver-3.141.59.jar

我看到了这个:

Exception in thread "main" java.lang.module.FindException: Module org.openqa.selenium.chrome not found
        at java.base/java.lang.module.Resolver.findFail(Resolver.java:877)
        at java.base/java.lang.module.Resolver.resolve(Resolver.java:128)
        at java.base/java.lang.module.Configuration.resolve(Configuration.java:411)
        at java.base/java.lang.module.Configuration.resolve(Configuration.java:245)
        at jdk.jdeps/com.sun.tools.jdeps.JdepsConfiguration.<init>(JdepsConfiguration.java:117)
        at jdk.jdeps/com.sun.tools.jdeps.JdepsConfiguration$Builder.build(JdepsConfiguration.java:563)
        at jdk.jdeps/com.sun.tools.jdeps.JdepsTask.buildConfig(JdepsTask.java:589)
        at jdk.jdeps/com.sun.tools.jdeps.JdepsTask.run(JdepsTask.java:543)
        at jdk.jdeps/com.sun.tools.jdeps.JdepsTask.run(JdepsTask.java:519)
        at jdk.jdeps/com.sun.tools.jdeps.Main.main(Main.java:49)

无论我要添加哪个模块,问题始终是:

java.lang.module.FindException name_of_your_module

使用更高的级别对我也没有帮助:

jdeps --module-path modules --add-modules  org.openqa.selenium --generate-module-info out selenium-chrome-driver-3.141.59.jar

错误将是:

Exception in thread "main" java.lang.module.FindException: Module org.openqa.selenium not found
        at java.base/java.lang.module.Resolver.findFail(Resolver.java:877)
        at java.base/java.lang.module.Resolver.resolve(Resolver.java:128)
        at java.base/java.lang.module.Configuration.resolve(Configuration.java:411)

所以,我能做的最后一件事是手动创建模块信息并使用exports 在每个模块中写入?

更新:

jdeps -cp guava-25.0-jre.jar;selenium-api-3.141.59.jar;selenium-remote-driver-3.141.59.jar selenium-chrome-driver-3.141.59.jar

通过-cp 选项查找课程:

selenium-chrome-driver-3.141.59.jar -> guava-25.0-jre.jar
selenium-chrome-driver-3.141.59.jar -> java.base
selenium-chrome-driver-3.141.59.jar -> selenium-api-3.141.59.jar
selenium-chrome-driver-3.141.59.jar -> selenium-remote-driver-3.141.59.jar

我已添加到selenium-chrome-driver-3.141.59.jarselenium-api-3.141.59.jar 以及guava-25.0-jre.jarselenium-remote-driver-3.141.59.jar

【问题讨论】:

  • 您的 jdeps 命令包含选项 --module-path modules - 为此,需要在您执行包含 Selenium Chrome 的所有依赖项的命令的目录中有一个文件夹 modules司机。是这样吗?
  • @Nicolai,例如我里面有硒 jar 文件:C:\Users\invzbl3\Desktop\modules。我在那里使用命令jdeps --module-path modules --generate-module-info out selenium-chrome-driver-3.141.59.jar。还有Error: missing dependencies。有趣的是,它恰好发生在 selenium-chrome-driver-3.141.59.jar 文件中,如果我对 selenium-api-3.141.59.jar 执行相同的操作,它会很好地工作。我不明白有什么区别。

标签: java jdeps


【解决方案1】:

文件selenium-chrome-driver-3.141.59.jar不是模块化 JAR,因为它不包含任何 模块信息,例如 module-info.class 文件。

对我来说,jdeps 在我使用 -cp 选项并添加依赖 JARS 时起作用,就像这样...

jdeps -cp guava-25.0-jre.jar;selenium-api-3.141.59.jar;selenium-remote-driver-3.141.59.jar selenium-chrome-driver-3.141.59.jar

我得到了这个输出......

selenium-chrome-driver-3.141.59.jar -> guava-25.0-jre.jar
selenium-chrome-driver-3.141.59.jar -> java.base
selenium-chrome-driver-3.141.59.jar -> selenium-api-3.141.59.jar
selenium-chrome-driver-3.141.59.jar -> selenium-remote-driver-3.141.59.jar
   org.openqa.selenium.chrome                         -> com.google.common.base                             guava-25.0-jre.jar
   org.openqa.selenium.chrome                         -> com.google.common.collect                          guava-25.0-jre.jar
   org.openqa.selenium.chrome                         -> com.google.common.io                               guava-25.0-jre.jar
   org.openqa.selenium.chrome                         -> java.io                                            java.base
   org.openqa.selenium.chrome                         -> java.lang                                          java.base
   org.openqa.selenium.chrome                         -> java.lang.invoke                                   java.base
   org.openqa.selenium.chrome                         -> java.util                                          java.base
   org.openqa.selenium.chrome                         -> java.util.function                                 java.base
   org.openqa.selenium.chrome                         -> java.util.stream                                   java.base
   org.openqa.selenium.chrome                         -> org.openqa.selenium                                selenium-api-3.141.59.jar
   org.openqa.selenium.chrome                         -> org.openqa.selenium.html5                          selenium-api-3.141.59.jar
   org.openqa.selenium.chrome                         -> org.openqa.selenium.interactions                   selenium-api-3.141.59.jar
   org.openqa.selenium.chrome                         -> org.openqa.selenium.mobile                         selenium-api-3.141.59.jar
   org.openqa.selenium.chrome                         -> org.openqa.selenium.remote                         selenium-remote-driver-3.141.59.jar
   org.openqa.selenium.chrome                         -> org.openqa.selenium.remote.html5                   selenium-remote-driver-3.141.59.jar
   org.openqa.selenium.chrome                         -> org.openqa.selenium.remote.http                    selenium-remote-driver-3.141.59.jar
   org.openqa.selenium.chrome                         -> org.openqa.selenium.remote.mobile                  selenium-remote-driver-3.141.59.jar
   org.openqa.selenium.chrome                         -> org.openqa.selenium.remote.service                 selenium-remote-driver-3.141.59.jar

【讨论】:

  • 感谢阿布拉的回答。我知道这不是模块化 JAR,所以我正在尝试为此 jar 模块信息文件生成以在 Java 11 项目中使用它。但是所有命令都不适用于我这种方式。如果 -cp 选项用于查找类,那么它如何帮助获取模块信息文件?因为我有:-classpath cannot be used with --generate-module-info option.
猜你喜欢
  • 1970-01-01
  • 2020-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-09
相关资源
最近更新 更多