【问题标题】:How can I resolve my class from a different jar with same structure like another如何从具有相同结构的不同 jar 中解析我的类
【发布时间】:2018-06-19 22:19:35
【问题描述】:

如何从另一个结构相同的不同 jar 中解析我的类

注意:虽然有问题的罐子包含单词 selenium 但这里的问题与 selenium

没有直接关系

直到几天前 PhantomJSDriverselenium-server-standalone-v.v.v.jar 捆绑在一起发布。所以我的班级工作正常:

import java.io.File;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.phantomjs.PhantomJSDriver;

public class A_PhantomJS
{
    public static void main(String[] args) 
    {
          File path=new File("C:\\Utility\\phantomjs-2.1.1-windows\\bin\\phantomjs.exe");
          System.setProperty("phantomjs.binary.path",path.getAbsolutePath());
          WebDriver driver= new PhantomJSDriver();
          driver.manage().window().maximize();
          driver.get("https://www.google.co.in");
    }
}

现在selenium-server-standalone-v.v.v.jar 不会为 PhantomJSDriver 依赖项捆绑 jar。

所以我已经下载了 jar phantomjsdriver-1.1.0.jar 并作为外部 jar 添加到我的项目中。

您可以看到phantomjsdriver-1.1.0.jar 的结构与之前与selenium-server-standalone-v.v.v.jar 捆绑时的结构相似

现在,虽然我的班级通过以下方式解决:

import org.openqa.selenium.phantomjs.PhantomJSDriver;

但我面临java.lang.NoClassDefFoundError 的运行时异常,如下所示:

Exception in thread "main" java.lang.NoClassDefFoundError: org/openqa/selenium/browserlaunchers/Proxies
    at org.openqa.selenium.phantomjs.PhantomJSDriverService.createDefaultService(PhantomJSDriverService.java:178)
    at org.openqa.selenium.phantomjs.PhantomJSDriver.<init>(PhantomJSDriver.java:99)
    at org.openqa.selenium.phantomjs.PhantomJSDriver.<init>(PhantomJSDriver.java:89)
    at demo.A_PhantomJS.main(A_PhantomJS.java:15)
Caused by: java.lang.ClassNotFoundException: org.openqa.selenium.browserlaunchers.Proxies
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 4 more

第 15 行是:

WebDriver driver= new PhantomJSDriver();

根据错误,我在 phantomjsdriver-1.1.0.jar 中搜索 org.openqa.selenium.browserlaunchers.Proxies 找不到任何线索。

谁能帮帮我?

【问题讨论】:

    标签: java selenium jar phantomjs classnotfoundexception


    【解决方案1】:

    最后这个问题在User Group 中由Simon Stewart 回答。

    回答There's a version of phantomjsdriver ('com.codeborne:phantomjsdriver:jar:1.4.4') that appears to be kept up to date with latest selenium releases. I'd suggest using that.

    这是西蒙评论的快照:

    这是有效的解决方案:

    【讨论】:

      【解决方案2】:

      异常表明在类路径中找不到所需的类。 正如您所提到的,您正在添加 PhantomJSDriver-jar 作为外部依赖项。确保您拥有正确的 jar 范围,并且在打包应用程序时将其捆绑在一起。

      请参阅此question 以更好地了解范围。

      【讨论】:

      • 谢谢@Ravik 您的回答方向正确。我已将确切答案添加为新答案。
      【解决方案3】:

      即使我也有同样的问题。试试下面的代码。它对我有用;

          WebDriver driver;
          File src = new File("//PATH");
          System.setProperty("phantomjs.binary.path", src.getAbsolutePath());
          DesiredCapabilities caps = new DesiredCapabilities();
          caps.setJavascriptEnabled(true);
          caps.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
          driver = new PhantomJSDriver(caps);
          driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);
      
          caps = new DesiredCapabilities();
          caps.setJavascriptEnabled(true);
          caps.setCapability(PhantomJSDriverService.PHANTOMJS_CLI_ARGS,
                  new String[] { "--web-security=no", "--ignore-ssl-errors=yes" });
          driver = new PhantomJSDriver(caps);
      
          driver.get("URL");
      

      【讨论】:

      • 感谢您的回答。我的问题不是关于 code 而是 configuration
      【解决方案4】:

      此 jar 包含 org.openqa.selenium.browserlaunchers.Proxies,请尝试将其添加到您的类路径:

      https://search.maven.org/remotecontent?filepath=org/seleniumhq/selenium/selenium-api/2.4.0/selenium-api-2.4.0.jar

      如果您错过了其他课程,您可以使用 Maven Central Repository 上的高级搜索按类名搜索它们:https://search.maven.org/#advancedsearch%7Cgav

      【讨论】:

      • 谢谢,这是否意味着如果我不捆绑特定 jar 并稍后将该 jar 添加为外部依赖项,我可能需要添加更多依赖项 jar?
      • 这取决于带有捆绑依赖关系的原始 jar 和没有捆绑依赖关系的新 jar 之间的差异:您是否确切知道它们的所有差异,以及新 jar 缺少什么?如果您不确定(例如您无法访问发行说明),那么是的,您会发现需要更多的依赖项 jar
      • 再次感谢。您的回答确实帮助我使用旧 jar 执行所需的调试。我已将确切答案添加为新答案。
      猜你喜欢
      • 1970-01-01
      • 2022-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 2020-12-23
      • 2020-02-08
      相关资源
      最近更新 更多