2017-08-18 23 views
0

JAXB-2 Mavenプラグインを使用して、いくつかのxsdファイルからJavaクラスを生成しています。私の構成は以下の通りです。私は3つのスキーマファイルを持っていますが、Cに含まれているBに含まれているターゲット名前空間Aを持たず、次にDとEという2つのスキーマDを用意しています。 バインディングや別の実行(エピソード付き)各スキーマに異なるパッケージのクラスを生成させるには?何かのように:JAXB-2 Mavenプラグイン、スキーマの組み込みとバインディング

A schema (no namespace) -> com.packageA 
B schema (no namespace) -> com.packageB 
C schema (no namespace) -> com.packageC 
D schema (namespace X) -> com.packageD 
E schema (namespace X) -> com.packageE 

もちろんクラスの重複はありませんか?または、空の名前空間を持つXSDファイルに属するクラスと、名前空間Xを持つ2つのXSDファイルに属するクラスの2つのパッケージを用意することです。これを実現するためにpom.xmlファイルの例を提供してください。 おかげ そして、どのようにすることができます

答えて

0

免責事項:私はmaven-jaxb2-pluginの著者はので、この答えはそのプラグインについてですよ。

これは「個別のスキーマのコンパイル」と呼ばれます。これは、エピソードを使用して達成することができます。文書のexplanationを参照してください。

要するに

  • 論理スキーマごとに1つのMavenプロジェクトを作成します。私は通常、別個の名前空間ごとに1つのプロジェクトを持っています。
  • スキーマBがスキーマAを使用する場合は、スキーマAの成果物をBの従属として含めます。
  • maven-jaxb2-pluginはデフォルトでエピソードとして依存関係を使用します。
  • 場合によっては、含まれているエピソードのためにいくつかのリバイバークラスが生成されます。 XJCのバグだと思う。そのような場合は、クリーンアップタスクを追加してください。
  • XJCは扱いにくいツールであるため、さまざまな奇妙な問題に直面してください。

projectは、このような方法で膨大なスキーマセットをコンパイルします。その結果、依存関係がスキーマの依存関係に非常に似ている100以上の成果物が生成されます。

私が見る1つの問題は、同じ(空の)名前空間を持つスキーマA、B、Cが異なるパッケージにマッピングされていることです。これはJAXBではうまく動作しないかもしれません( "chameleon namespaces"も参照してください)。

+0

おかげさまで@lexicoreさん、ありがとうございました。あなたが説明したことを、さまざまなアーティファクトを持たずに行う方法はありません。 – filmac

+0

空の名前空間用のものと名前空間Xのものの2つのパッケージを持つことができます。 – lexicore

関連する問題