如何在jython中导入java代码(使用外部jar)?

时间:2018-04-20 20:39:14

标签: java selenium-webdriver jython-2.7

我在导入使用一些外部jar的java代码时遇到问题,比如selenium_standalone_server jar。

我尝试使用普通代码而不使用java中的jar,在这种情况下我可以导入并运行代码,但是当我在java代码中使用一些jar然后尝试将该类导入jython时,它会出错。

以下是我使用的示例代码。我在下面创建了jar代码" jython_test.jar"

package Jython_workspace;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;



public class selenium_try {

        public void launch_browser()
        {

            WebDriver driver = new FirefoxDriver();
            System.out.println("Hello Google...");
            driver.get("http://google.com");

        }


}

此代码使用selenium_server-standalone-3.11.0.jar。

在jython中导入java jar。

import sys

sys.path.append("jython_test.jar")

from jython_test import selenium_try as sel

beach = sel.launch_browser()

遇到错误。

Traceback (most recent call last):
  File "D:\PD\sublime_code\Jython_workspace\try_selenium_python.py", line 5, in <module>
    from jython_test import selenium_try as sel
java.lang.NoClassDefFoundError: org/openqa/selenium/WebDriver
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at org.python.core.Py.loadAndInitClass(Py.java:991)
    at org.python.core.Py.findClassInternal(Py.java:926)
    at org.python.core.Py.findClassEx(Py.java:977)
    at org.python.core.packagecache.SysPackageManager.findClass(SysPackageManager.java:133)
    at org.python.core.packagecache.PackageManager.findClass(PackageManager.java:33)
    at org.python.core.packagecache.SysPackageManager.findClass(SysPackageManager.java:122)
    at org.python.core.PyJavaPackage.__findattr_ex__(PyJavaPackage.java:134)
    at org.python.core.PyObject.__findattr__(PyObject.java:946)
    at org.python.core.imp.importFromAs(imp.java:1160)
    at org.python.core.imp.importFrom(imp.java:1132)
    at org.python.pycode._pyx0.f$0(D:\PD\sublime_code\Jython_workspace\try_selenium_python.py:7)
    at org.python.pycode._pyx0.call_function(D:\PD\sublime_code\Jython_workspace\try_selenium_python.py)
    at org.python.core.PyTableCode.call(PyTableCode.java:167)
    at org.python.core.PyCode.call(PyCode.java:18)
    at org.python.core.Py.runCode(Py.java:1386)
    at org.python.util.PythonInterpreter.execfile(PythonInterpreter.java:296)
    at org.python.util.jython.run(jython.java:362)
    at org.python.util.jython.main(jython.java:142)
Caused by: java.lang.ClassNotFoundException: org.openqa.selenium.WebDriver
    at org.python.core.SyspathJavaLoader.findClass(SyspathJavaLoader.java:131)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 20 more

java.lang.NoClassDefFoundError: java.lang.NoClassDefFoundError: org/openqa/selenium/WebDriver

当java使用第三方jar并且我们想要在jython中导入时,如何解决这个问题。

2 个答案:

答案 0 :(得分:0)

尝试导入Java类时必须指定完整的包路径。

尝试使用 import Jython_workspace.selenium_try

答案 1 :(得分:0)

我首先找到了答案,我们必须在java中使用静态方法,并将已经在java中导入的类似jar导入到jython代码中。 多数民众赞成你现在好了。