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);
}
そして最後に、ここで説明されているように、Jython オブジェクトとしてPythonInterpreter
公開するために使用するファクトリ クラスを作成しました。highlighter.py
さて、このコード行を実行すると
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 を使用できたかどうか知りたいです。提案をいただければ幸いです