0

私は問題があります。多くのシステムにわたる多くのオブジェクトの定義を含む、非常に大きな会社の XSD ファイルがあります。この XSD から別のプロジェクトでいくつかの Java クラスを生成したくありませんが、XSD で定義されたすべてのクラスを生成したくありません。

MavenでJAXBを使用してJavaクラスを生成するためのXSDルートノードのようなものを指定することは可能ですか?

私の質問が明確であることを願っています:)

4

2 に答える 2

0

あなたの質問は私がよく目にするものです。XSDの大きなボディに典型的なものだと思います。

残念ながら、私はJAXBを認識していません。生成プロセスを制御する方法であり、希望する方法ではありません。

このために私が開発した代替ソリューション、つまりこの時点からの私の偏見は、自動XMLスキーマリファクタリング(XSR)に依存しています。基本的にXSDを取り込み、一連のXSDオブジェクト(この場合はおそらくいくつかのグローバル要素といくつかのタイプ)から、必要なアイテムのみを含み、綿毛を含まないXSDのサブセットを生成します。これらのXSDをJAXBに通すと、まさに必要なものが得られます。これには、QTAssistantとそのXSR機能が含まれます。高レベルの手順は次のとおりです。

  • 新しいXSRファイルを作成します。
  • XMLスキーマコレクションでソースXSDを参照する
  • 「リリース」を作成します。グラフィカルエディタがそれを支援します。基本的に、必要な最上位のXSDオブジェクトと新しいXSDファイルの場所を一致させます。
  • 新しいXSDを生成します。
  • アーティファクトで新しいXSDを使用します。

QTAssistantは、Exec Mavenプラグインを介したMavenとのコマンドライン統合をサポートしていますが、Windowsでのみサポートされています。

于 2012-06-07T15:11:23.790 に答える
0

XJC 引数を取ることができる Java クラスを生成するためのプラグインがあります。これは、より高度な構成内のフックになる可能性があります。しかし、私はこれらに精通していません。

プラグインのソースから取得:

/**
 * Space separated string of extra arguments,
 * for instance <code>-Xfluent-api -episode somefile</code>;
 * These will be passed on to XJC as
 * <code>"-Xfluent-api" "-episode" "somefile"</code> options.
 * 
 * @parameter expression="${xjc.arguments}"
 */
protected String arguments;

プラグイン構成の pom.xml の例:

<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>1.3.1</version>
<executions>
    <execution>
        <id>xjc</id>
        <phase>process-resources</phase>
        <goals>
            <goal>xjc</goal>
        </goals>
    </execution>
</executions>
<configuration>
    <packageName>package.name</packageName>
    <schemaDirectory>${basedir}/src/main/webapp/WEB-INF/xsd</schemaDirectory>
    <bindingDirectory>${basedir}/src/main/java</bindingDirectory>
</configuration>
</plugin>
于 2012-06-07T15:22:11.457 に答える