私は問題があります。多くのシステムにわたる多くのオブジェクトの定義を含む、非常に大きな会社の XSD ファイルがあります。この XSD から別のプロジェクトでいくつかの Java クラスを生成したくありませんが、XSD で定義されたすべてのクラスを生成したくありません。
MavenでJAXBを使用してJavaクラスを生成するためのXSDルートノードのようなものを指定することは可能ですか?
私の質問が明確であることを願っています:)
あなたの質問は私がよく目にするものです。XSDの大きなボディに典型的なものだと思います。
残念ながら、私はJAXBを認識していません。生成プロセスを制御する方法であり、希望する方法ではありません。
このために私が開発した代替ソリューション、つまりこの時点からの私の偏見は、自動XMLスキーマリファクタリング(XSR)に依存しています。基本的にXSDを取り込み、一連のXSDオブジェクト(この場合はおそらくいくつかのグローバル要素といくつかのタイプ)から、必要なアイテムのみを含み、綿毛を含まないXSDのサブセットを生成します。これらのXSDをJAXBに通すと、まさに必要なものが得られます。これには、QTAssistantとそのXSR機能が含まれます。高レベルの手順は次のとおりです。
QTAssistantは、Exec Mavenプラグインを介したMavenとのコマンドライン統合をサポートしていますが、Windowsでのみサポートされています。
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>