如何从具有相同结构的不同 jar 解析我的 class
How can I resolve my class from a different jar with same structure like another
我怎样才能从另一个结构相同的 jar 中解析我的 class
Note : Though the jars in question contains the word selenium but the question here have no direct relation with selenium
直到几天前 PhantomJSDriver 与 selenium-server-standalone-v.v.v.jar
捆绑发布。所以我的 Class 工作正常:
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
捆绑在一起时的结构
现在,尽管我的 Class 通过以下方式得到解决:
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 中搜索了 org.openqa.selenium.browserlaunchers.Proxies
。0.jar 找不到任何线索。
有人可以帮我吗?
此 jar 包含 org.openqa.selenium.browserlaunchers.Proxies,请尝试将其添加到您的类路径中:
如果您遗漏了其他 类,您可以在 Maven 中央存储库上使用高级搜索按类名搜索它们:https://search.maven.org/#advancedsearch%7Cgav
甚至我也有同样的问题。试试下面的代码。它对我有用;
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");
异常表明在 class 路径中找不到所需的 class。
正如您所提到的,您正在添加 PhantomJSDriver-jar
作为外部依赖项。确保您具有正确的 jar 范围,并且在打包应用程序时将其捆绑。
请参阅此 question 以更好地了解范围。
终于在 User Group by none other than Simon Stewart.
中回答了问题
Answer : 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.
这是 Simon 评论的快照:
这是有效的解决方案:
我怎样才能从另一个结构相同的 jar 中解析我的 class
Note : Though the jars in question contains the word selenium but the question here have no direct relation with selenium
直到几天前 PhantomJSDriver 与 selenium-server-standalone-v.v.v.jar
捆绑发布。所以我的 Class 工作正常:
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
现在,尽管我的 Class 通过以下方式得到解决:
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 中搜索了 org.openqa.selenium.browserlaunchers.Proxies
。0.jar 找不到任何线索。
有人可以帮我吗?
此 jar 包含 org.openqa.selenium.browserlaunchers.Proxies,请尝试将其添加到您的类路径中:
如果您遗漏了其他 类,您可以在 Maven 中央存储库上使用高级搜索按类名搜索它们:https://search.maven.org/#advancedsearch%7Cgav
甚至我也有同样的问题。试试下面的代码。它对我有用;
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");
异常表明在 class 路径中找不到所需的 class。
正如您所提到的,您正在添加 PhantomJSDriver-jar
作为外部依赖项。确保您具有正确的 jar 范围,并且在打包应用程序时将其捆绑。
请参阅此 question 以更好地了解范围。
终于在 User Group by none other than Simon Stewart.
中回答了问题Answer :
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.
这是 Simon 评论的快照:
这是有效的解决方案: