1

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

我已尝试在此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
4

2 回答 2

1

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

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

  1. jar 文件不在服务器上的类路径中。
  2. jar 文件是使用比运行时环境更新的 JDK 编译的(尽管这应该会产生不同的异常)。
  3. 该类所依赖的某些 jar 文件丢失或版本错误。(这应该在异常中产生不同的类名,所以不太可能。)
  4. jar 文件的本机部分的 dll 丢失或架构不正确。(稀有的)

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

于 2019-07-11T17:26:14.300 回答
0

谢谢,正如您所说:该类所依赖的某些jar文件丢失或版本错误。(这应该在异常中产生不同的类名,所以不太可能。)

于 2019-12-02T12:35:24.523 回答