8

クラスパスに /xsd/a.xsd を持つ Maven プロジェクト A があります。また、プロジェクト B には、カタログ エントリを介して /xsd/a.xsd を参照する /xsd/b.xsd があります。カタログ エントリは次のようになります。

PUBLIC "http://foo.org/a" "maven:org.foo:a:jar::!/xsd/a.xsd"

URL の Maven プロトコルに注意してください。カタログは org.jvnet.jaxb2.maven2:maven-jaxb22-plugin によって使用され、依存関係からのエピソードを含む JAXB アノテーション付き Java クラスを生成します。

これまでのところ、すべてが良好です。

ここで、Eclipse で /xsd/b.xsd を編集したいと思います。Eclipse は次の警告を報告します。

<xsd:import namespace="http://foo.org/a" />

schemaLocation 属性がないと /xsd/a.xsd を見つけることができないためです。Eclipse は、上記で定義されたカタログ エントリを認識しません。

見つかった回避策は、Eclipse / Window / Preferences / XML / XML Catalog にカタログ エントリを追加することです。

PUBLIC "http://foo.org/a" "jar:file:/home/alain/maven/repository/org/foo/a/1.0-SNAPSHOT/a-1.0-SNAPSHOT.jar!/xsd/a.xsd"

私のローカル リポジトリ (maven は .m2 へのリンク) への参照と、依存プロジェクトの特定のバージョンへの参照に注意してください。

この問題に直面し、より良い回避策を見つけた人はいますか?

4

1 に答える 1

1

私が思いつくことができる最高のものは次のとおりです。

  • プロジェクト内の jar の xsds を maven-dependency-plugin:unpack で抽出します

  • ここから Eclipse / Window / Preferences / XML / XML Catalog で xsds を参照します。

少なくとも、ローカル パス/バージョンへの参照はありません。

jaxb のカタログが既にある場合は、1 つずつ編集しなくても (XML カタログではなくインポート メニューを使用して) Eclipse に直接インポートできることに注意してください。

于 2013-10-17T09:09:25.470 に答える