Кто-нибудь успешно использовал JPype для загрузки фотонных классов Netflix? - PullRequest
0 голосов
/ 25 августа 2018

Я создал образ докера Netflix Photon из https://github.com/Netflix/photon, и он работает так, как я могу запустить контейнер и запустить предоставленные Java-приложения.

Поверх этого я установил Python3,gcc и JPype1-py3, но я не могу загрузить Java-классы Photon.

Я могу успешно запустить JVM, используя:

startJVM (getDefaultJVMPath (), "-ea", "-Djava.class.path = / source / build / libs") java.lang.System.out.println ("привет мир") Hello World

Итак, я знаю, что сама 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

Кто-нибудь мог напрямую интегрироваться с классами фотонов Netflix с помощью JPype??Я бы предпочел не ограничиваться запуском предоставленных приложений через подпроцесс.

1 Ответ

0 голосов
/ 30 августа 2018

сверчков! ??

Хорошо, я все равно разобрался, пришлось загружать файлы 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")
...