同じ標準ディレクトリjaxb2-maven-plugin
にすべて存在するWSDLおよび複数のXSDファイルからJavaクラスを生成するようにsrc/main/xsd
を構成するのに問題があります。
インラインXSDでjaxb2 mavenプラグインを使用する方法 は、回答がプラグイン構成でwsdl
パラメーターの使用を正しく示唆しているという点でのみ関連していますが、その質問はインラインXSDとXSDは外部です。
プラグインの目標パラメーターは here にリストされています。
私のプラグイン構成は次のとおりです。
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<id>xjc</id>
<goals>
<goal>xjc</goal>
</goals>
</execution>
</executions>
<configuration>
<packageName>com.x.y.model</packageName>
<wsdl>true</wsdl>
</configuration>
</plugin>
私はこれをmvn -X clean jaxb2:xjc
でテストしていますが、プラグインはデバッグ出力に見られるように.wsdl
を無視しています
[DEBUG] accept false for file c:\projects\foo\src\main\xsd\service.wsdl
[DEBUG] accept true for file c:\projects\foo\src\main\xsd\datatypes.xsd
[DEBUG] accept true for file c:\projects\foo\src\main\xsd\more-datatypes.xsd
JAXB XJCに渡される引数のMavenデバッグ出力(および少しの試行錯誤)を調べると、プラグインにさらに2つの構成パラメーターを提供する必要があることがわかりました。
これにより、XSDファイルのプラグインスキャンが停止され、.wsdl
がソースとして使用されます。 XSDファイルは、WSDL as<xsd:include schemaLocation="datatypes.xsd" />
ディレクティブに含まれています。たとえば、ローカルで解決され、WSDLからすべてのタイプが生成され、XSDがJavaクラスとして生成されます。
私のために働いた構成セクションは次のとおりです。
<configuration>
<packageName>com.x.y.model</packageName>
<wsdl>true</wsdl>
<xmlschema>false</xmlschema>
<schemaFiles>service.wsdl</schemaFiles>
</configuration>
<xmlschema>false</xmlschema>
Mavenエラーなし:
org.Apache.maven.lifecycle.LifecycleExecutionException:ゴールの実行に失敗しましたorg.codehaus.mojo:jaxb2-maven-plugin:1.5:xjc(default-cli)プロジェクトfoo:スキーマを処理できませんでした:/ c:/ projects/foo /src/main/xsd/service.wsdl
Wsdlとxsdを生成している場合、異なる実行構成を設定してください:同じschemaDirectory
を持たないか、2回目の実行でプラグインが正常に実行されない場合、この変数に基づいて実行をキャッシュします。私はそれをするようにアドバイスします
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>1.6</version>
<executions>
<execution>
<id>generate-sri-facturas</id>
<phase>generate-sources</phase>
<goals>
<goal>xjc</goal>
</goals>
<configuration>
<outputDirectory>target/generated-sources/sri</outputDirectory>
<packageName>${commonsource.packageName}</packageName>
<schemaDirectory>src/main/resources/schema/xsd</schemaDirectory>
<schemaFiles>factura_v1.1.0.xsd</schemaFiles>
</configuration>
</execution>
<execution>
<id>generate-sri-autorizacion-comprobantes</id>
<phase>generate-sources</phase>
<goals>
<goal>xjc</goal>
</goals>
<configuration>
<outputDirectory>target/generated-sources/sri/autorizacion</outputDirectory>
<packageName>${commonsource.packageName}.autorizacion</packageName>
<wsdl>true</wsdl>
<xmlschema>false</xmlschema>
<schemaDirectory>src/main/resources/schema/wsdl</schemaDirectory>
<schemaFiles>AutorizacionComprobantes.wsdl</schemaFiles>
</configuration>
</execution>
</executions>
</plugin>
xsd
およびwsdl
フォルダーを作成して、構成を分離しました。
私が試してみました jaxb2-maven-plugin
Javaファイルを生成します
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>xjc</goal>
</goals>
</execution>
</executions>
<configuration>
<schemaDirectory>src/main/webapp/schemas/</schemaDirectory>
<wsdl>true</wsdl>
<outputDirectory>src/main/Java</outputDirectory>
</configuration>
</plugin>
これを実行するには、コマンドを使用しました
mvn jaxb2:xjc
これを試してみると、srcフォルダにjaxbクラスが生成されます。あなたがこれを探していることを願っています。
構成では次のコードを使用できます。
<configuration>
<!-- Package to store the generated file -->
<packageName>com.example.demo.wsdl</packageName>
<!-- Treat the input as WSDL -->
<wsdl>true</wsdl>
<!-- Input is not XML schema -->
<xmlschema>false</xmlschema>
<!-- The WSDL file that you saved earlier -->
<schemaFiles>horarios.wsdl</schemaFiles>
<!-- The location of the WSDL file -->
<schemaDirectory>${project.basedir}/src/main/resources</schemaDirectory>
<!-- The output directory to store the generated Java files -->
<outputDirectory>${project.basedir}/src/main/Java</outputDirectory>
<!-- Don't clear output directory on each run -->
<clearOutputDir>false</clearOutputDir>
</configuration>