1

Jython.jarを含めて、Java プロジェクトでPygmentsを使用しようとしています。私のJavaプロジェクトには、src/main/pythonpygmentsファイルを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 を使用できたかどうか知りたいです。提案をいただければ幸いです

4

1 に答える 1

1

わかった。私はそれを考え出した。初歩的なエラーはほとんどありませんが、Java プロジェクトで Pygments を機能させる方法を知りたい場合は、完全なチュートリアル リンクをご覧ください。

ハイライト:

  • 裸の jython.jar を使用するだけでは不十分です。
  • Jython/Lib をクラスパスに追加しても機能しません。私はjython.jarを解凍し、Libディレクトリ+すべてのpygmentsファイルを結果の構造に追加してから、再びjarリングしました
  • 上記のリンクからの工場の例は複雑です。はるかに良い方法は、Jythbookの第10章を使用することです
  • 変更された highlighter.py、Highlighter.java、および HighlighterFactory.java の例については、チュートリアルを参照してください。
于 2010-11-30T19:12:34.750 に答える