Jython-在Java项目中使用Pygments

Jython-在Java项目中使用Pygments,java,python,jython,pygments,Java,Python,Jython,Pygments,我试图在Java项目中使用Jython.jar。在我的Java项目中,我有src/main/pythonsource目录,在那里我将pygments文件放在pygments文件夹中,以便它们最终位于类路径上。现在,我在src/main/python中创建了highlighter.py文件,内容如下: import sys sys.path.append('WEB-INF/classes') from pygments import highlight from pygments.lexers i

我试图在Java项目中使用Jython.jar。在我的Java项目中,我有
src/main/python
source目录,在那里我将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");
我得到如下异常

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中,我不得不将Jython/Lib目录复制到src/main/python下,但最终我丢失了IOString模块


或者也许有更好的方法来实现我想要实现的目标?我很好奇是否有人能在Java项目中使用Pygments。如果您有任何建议,我将不胜感激。我想出来了。犯了一些初学者错误,但如果您想知道如何使Pygments在Java项目中工作,这里有

亮点:

  • 使用裸jython.jar是不够的
  • 将Jython/Lib添加到类路径不起作用。我最终取消了jython.jar的关联,将Lib directory+所有pygments文件添加到结果结构中,然后再次对其进行jar处理
  • 工厂示例:上面的链接是复杂的。更好的方法是使用Jython book
  • 有关更改的highlighter.py、highlighter.java和HighlighterFactory.java的示例,请参阅教程

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

    亮点:

    • 使用裸jython.jar是不够的
    • 将Jython/Lib添加到类路径不起作用。我最终取消了jython.jar的关联,将Lib directory+所有pygments文件添加到结果结构中,然后再次对其进行jar处理
    • 工厂示例:上面的链接是复杂的。更好的方法是使用Jython book
    • 有关更改的highlighter.py、highlighter.java和HighlighterFactory.java的示例,请参阅教程

    sys.path包含什么?现在,当您提到它时,我已经在highlighter.py中添加了sys.path.append('WEB-INF/classes')。TestingNow我有一个不同的问题-我编辑了原始post
    sys.path
    包含什么?现在当您提到它时,我已经将sys.path.append('WEB-INF/classes')添加到highlighter.py。测试现在我有一个不同的问题-我编辑了原始的Post,它的性能非常好。放弃了,但本教程适用于Java webappHi中Jython的一般设置,对于最多10-20行的代码段,性能如何?它的性能非常好。放弃了,但是本教程对于JavaWebApphi中Jython的一般设置很好,对于最多10-20行的代码片段,性能如何?