2

Ant 1.8.2 ビルドが、SVG DTD の要求に対する W3C Web サイトからの HTTP 303 応答で失敗し始めました。そこで、ローカルで解決するために XML カタログを導入しようとしています。

クラスパスを変更しないと、次のようになります。

警告: XML リゾルバーが見つかりません。外部カタログは無視されます

Apache XML Commons 1.2 の resolver.jar をクラスパスに追加すると (たとえば、ant 呼び出しで -lib を使用して)、次のようになります。

/Users/mike/..../build.xml:123: java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブ メソッド) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) で java.lang.reflect.Method.invoke(Method.java:597) で org.apache.tools.ant.types.XMLCatalog$ExternalResolver.processExternalCatalogs(XMLCatalog) .java:1115) org.apache.tools.ant.types.XMLCatalog$ExternalResolver.resolveEntity(XMLCatalog.java:960) org.apache.tools.ant.types.XMLCatalog.resolveEntity(XMLCatalog.java:391)

これは、私が使用している resolver.jar が見つかったことを示唆していますが、Ant が期待しているインターフェースがありません。

Ant で使用する正しい resolver.jar はどこで入手すればよいですか?

4

2 に答える 2

2

解決策を見つけました(まあ、回避策...)

InvocationTargetException は、レッドニシン (二次エラー) であることが判明しました。主なエラーは次のとおりです。カタログ ファイル catalog.xml に DTD catalog.dtd への相対参照が含まれており、Ant (またはリゾルバー) が catalog.dtd への参照を解決できませんでした。カタログを含むディレクトリではなく、ビルドファイルを含むディレクトリを探していました。これは明らかにどこかのバグです。私がさらに調査していた場合、Ant がベース URI なしで、または間違ったベース URI でカタログ ファイルをカタログ リゾルバに渡しているのではないかと疑っています。そのため、XML パーサーは DTD を見つける場所を推測しなければならず、推測が間違っています。 .

私の解決策は、DTD への参照を削除することでした。この後、カタログにリストされた URI はローカル コピーに正しく解決されました。興味深いことに、ローカル コピーへの参照もカタログに関連しているため、カタログ リゾルバはカタログの場所を認識しているように見えますが、解析時に誰かが Xerces に通知していません。

于 2013-02-19T08:21:09.287 に答える