【问题标题】:Has anyone successfully use JPype to load the Netflix photon classes?有没有人成功使用 JPype 加载 Netflix 光子类?
【发布时间】:2019-01-31 08:39:56
【问题描述】:

我从 https://github.com/Netflix/photon 构建了 Netflix Photon docker 映像,它的工作原理就像我能够启动容器并运行提供的 java 应用程序一样。

除此之外,我还安装了 Python3、gcc 和 JPype1-py3,但无法加载 Photon java 类。

我可以使用以下方法成功启动 JVM:

startJVM(getDefaultJVMPath(), "-ea", "-Djava.class.path=/source/build/libs") java.lang.System.out.println("你好世界") 你好世界

所以我知道 JVM 本身正在工作,但是每当我尝试从 Photon 加载一个类时,我都会收到一个错误:

>>> s = JClass("com.netflix.imflibrary.st2067_2.ImpAsset")
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.5/dist-packages/jpype/_jclass.py", line 55, in JClass
  raise _RUNTIMEEXCEPTION.PYEXEC("Class %s not found" % name)
jpype._jexception.ExceptionPyRaisable: java.lang.Exception: Class com.netf;ox/imflibrary.st2067_2.IMPAsset not found

有没有人能够使用 JPype 直接与 Netflix photon 类集成?我宁愿不局限于通过子进程运行提供的应用程序。

【问题讨论】:

    标签: java python netflix jpype


    【解决方案1】:

    蟋蟀!??

    好吧,反正我想通了,只好像这样加载jar文件:

    try:
        from jpype import *
        classpath="/source/build/libs/Photon-0.1.0-SNAPSHOT.jar:/source/build/libs/log4j-1.2.17.jar:/source/build/libs/regxmllib-1.1.1.jar:/source/build/libs/slf4j-log4j12-1.7.25.jar:/source/build/libs/jsr305-3.0.1.jar:/source/build/libs/log4j.properties:/source/build/libs/slf4j-api-1.7.25.jar"
        startJVM(getDefaultJVMPath(), "-Djava.class.path=%s" % classpath)
        print("JVM started: ",getDefaultJVMPath())
        print("classpath=",classpath)
    except Exception as e:
    print("error launching JVM:", traceback.format_exc())
    exit()
    
    print("Starting scan of",scanfolder)
    IMPAnalyzer = JClass("com.netflix.imflibrary.app.IMPAnalyzer")
    IMPFile = java.io.File(scanfolder)
    error_fatal = 0
    error_nonfatal = 0
    error_warning = 0
    if IMPFile.isDirectory():
        result_dict = {}
        IMPresult_iterator = IMPAnalyzer.analyzePackage(IMPFile).entrySet().iterator()
        while IMPresult_iterator.hasNext():
            resultpair = IMPresult_iterator.next()
            # print(resultpair.getKey(),":")
            if len(resultpair.getValue()) > 0:
                error_list = []
                list_iterator = resultpair.getValue().iterator()
                while list_iterator.hasNext():
                    errorobject = list_iterator.next()
                    error_list.append(str(errorobject.errorLevel) + ":" + str(errorobject.errorCode) + ":" + errorobject.toString())
                    if str(errorobject.errorLevel) == "WARNING":
                            error_warning += 1
                    elif str(errorobject.errorLevel) == "NON FATAL":
                            error_nonfatal += 1
                    elif str(errorobject.errorLevel) == "FATAL":
                            error_fatal += 1
                result_dict[resultpair.getKey()] = error_list
            else:
                result_dict[resultpair.getKey()]='Ok'
        print(scanfolder,"scanned with",error_fatal,"fatal error(s),",error_nonfatal,"nonfatal error(s), and",error_warning,"warning(s)")
        pprint.pprint(result_dict)
    else:
        print(scanfolder,"does not appear to be a valid folder")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-21
      • 1970-01-01
      • 2014-04-15
      • 2011-01-26
      • 1970-01-01
      • 1970-01-01
      • 2014-07-08
      • 1970-01-01
      相关资源
      最近更新 更多