我正在尝试使用sutime python包装器制作日期规范化程序,该规范化程序会将字符串中的任何时间信息转换为YYYY-MM-DD格式的日期。我创建了一个类,该类具有关于sutime输出的规则,可以将sutime输出转换为如上所述的标准格式。该程序在我的本地计算机上正常运行,但是当我尝试在服务器上运行它时,出现jpype._jclass.NoClassDefFoundError。服务器在使用python2的ubuntu上,而我的本地服务器使用python3的Windows。

我已经尝试在此https://sourceforge.net/p/jpype/discussion/379372/thread/689d7a9b/论坛上实现针对类似问题的解决方案,但是我不确定我是否能够正确实现这些灵魂。我还检查了sutime是否支持python3和python2

我认为问题出在jpype或sutime库。

This is the traceback that i got
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "date_normalizer.py", line 38, in __init__
    self.sutime = SUTime(jars=self.jar_files, mark_time_ranges=mark_time_ranges)
  File "/home/bridgei2i/.local/lib/python2.7/site-packages/sutime/sutime.py", line 57, in __init__
    'edu.stanford.nlp.python.SUTimeWrapper')
  File "/home/bridgei2i/.local/lib/python2.7/site-packages/jpype/_jclass.py", line 130, in __new__
    return _JClassNew(args[0], **kwargs)
  File "/home/bridgei2i/.local/lib/python2.7/site-packages/jpype/_jclass.py", line 213, in _JClassNew
    javaClass = _jpype.PyJPClass(arg)
jpype._jclass.NoClassDefFoundError: edu/stanford/nlp/python/SUTimeWrapper

最佳答案

似乎在服务器上找不到保存edu/stanford/nlp/python/SUTimeWrapper的jar文件。失败的特定代码是对JClass('edu.stanford.nlp.python.SUTimeWrapper')的调用,这是从jar中加载类的请求。我建议检查服务器上的类路径和配置。

可能的原因是(按可能性顺序)


jar文件不在服务器上的类路径中。
jar文件是使用比运行时环境新的JDK编译的(尽管这会生成不同的异常)。
该类依赖的某些jar文件丢失或版本错误。 (这将在异常中产生一个不同的类名,因此不太可能。)
jar文件的本机部分的dll丢失或体系结构不正确。 (罕见)


假设jar文件在服务器上,我建议检查JPype startJVM调用的初始化,以查看jar的路径是否正确。也可以使用print(jpype.java.lang.System.getProperty('java.class.path'))检查加载的类路径,以查看本地计算机和服务器计算机之间是否存在差异。

09-07 08:38