Jython在Java项目中使用Pygments

2024-04-25 02:18:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在Java项目中使用Pygments,方法是包括Jython.jar. 在我的Java项目中,我有src/main/python源目录,我把pygments文件放在pygments文件夹中,这样它们就在类路径上了。现在我创造了荧光笔.py包含以下内容的src/main/python文件:

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

^{pr2}$

最后,我创建了一个工厂类,它使用PythonInterpreter将{}公开为Jython对象{a2}

现在,当我运行这行代码时

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

如果我使用jythonv.2.5.0,就会出现这种情况。在2.1中,我不得不将Jython/Lib目录复制到src/main/python下,但最后却丢失了IOString模块

或者也许有更好的方法来实现我想要达到的目标?我很好奇是否有人能够在Java项目中使用Pygments。如有任何建议,我将不胜感激


Tags: 项目frompyimportsrcwebpygmentsmain
1条回答
网友
1楼 · 发布于 2024-04-25 02:18:43

好吧。我想出来了。初学者犯了一些错误,但是如果您想知道如何使Pygments在Java项目中工作,这里是full tutorial link

亮点:

  • 使用裸体jython.jar是不够的。在
  • 将Jython/Lib添加到类路径中不起作用。最后我放弃了jython.jar并将Lib directory+all pygments文件添加到结果结构中,然后再次对其进行jaring
  • 以上链接的工厂示例是复杂的。更好的方法是使用Jython bookchapter 10
  • 例如荧光笔.py, 荧光笔.java以及HighlighterFactory.java请参阅教程

相关问题 更多 >