我正在尝试通过包含 Jython.jar 在 Java 项目中使用Pygments 。在我的 Java 项目中,我src/main/python
有源目录,我将 pygments 文件放入 pygments 文件夹中,因此它们最终位于类路径中。现在我在 src/main/python 中创建了 highlighter.py 文件,内容如下:
import sys
sys.path.append('WEB-INF/classes')
from pygments import highlight
from pygments.lexers import get_lexer_by_name
from pygments.formatters import HtmlFormatter
class Highlighter:
def colorize(code, lexername):
lexer = get_lexer_by_name(lexername, stripall=True)
formatter = HtmlFormatter(linenos=True, cssclass="source")
return highlight(code, lexer, formatter)
然后我定义了Java接口Highlighter.java
public interface Highlighter {
String colorize(String rawText, String lexer);
}
最后,我创建了工厂类,用于PythonInterpreter
公开highlighter.py
为 Jython 对象,如此处所述
现在,当我运行这行代码时
Highlighter hl = (Highlighter) jf.getJythonObject(Highlighter.class.getName(),
"WEB-INF/classes/highlighter.py");
我得到 PyException 如下
Traceback (most recent call last):
File "WEB-INF/classes/highlighter.py", line 3, in
from pygments import highlight
LookupError: no codec search functions registered: can't find encoding
如果我使用 Jython v. 2.5.0,就会发生这种情况。在 2.1 中,我不得不复制 src/main/python 下的 Jython/Lib 目录,但最终我丢失了 IOString 模块
或者也许有更好的方法来实现我想要实现的目标?我很好奇是否有人能够在 Java 项目中使用 Pygments。我将不胜感激任何建议