web-dev-qa-db-ja.com

JAXB mavenプラグインがクラスを生成しない

Javaファイルを生成しようとしていますが、以下のコードは生成されません。outputDirectoryのコメントを外すと、機能しますが、最初にフォルダを削除します。追加clearOutputDir = falseも何も生成していません。

<build>
        <plugins>
            <!-- JAXB xjc plugin that invokes the xjc compiler to compile XML schema into Java classes.-->
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>jaxb2-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>xjc</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <!-- The package in which the source files will be generated. -->
                    <packageName>uk.co.infogen.camel.message</packageName>
                    <!-- The schema directory or xsd files. -->
                    <sources>
                        <source>${basedir}/src/main/resources/xsd</source>
                    </sources>
                    <!-- The working directory to create the generated Java source files. -->
                    <!--<outputDirectory>${basedir}/src/main/Java</outputDirectory>
                    <clearOutputDir>false</clearOutputDir>-->
                </configuration>
            </plugin>
        </plugins>
    </build>

私はメッセージを受け取ります:

[INFO] --- jaxb2-maven-plugin:2.2:xjc (default) @ service-business ---
[INFO] Ignored given or default xjbSources [/Users/aaa/development/workspace/infogen/infogen_example/service-business/src/main/xjb], since it is not an existent file or directory.
[INFO] No changes detected in schema or binding files - skipping JAXB generation.
11
krmanish007

まず、src/main/Java内でコードを生成することは絶対にしないでください。生成されたコードはバージョン管理されるべきではなく、とにかく再生成されるため、いつでも削除できます。

生成されたコードは常に、Mavenのビルドディレクトリであるtargetの下に配置する必要があります。 jaxb2-maven-plugin は、デフォルトで target/generated-sources/jaxb の下にクラスを生成します。これを変更する理由はありません。 Eclipseを使用している場合は、このフォルダーを右クリックし、「ビルドパス>ソースフォルダーの使用」を選択して、このフォルダーをビルドパスに追加するだけです。

Mavenを実行するときは、mvn clean installを使用して実行します。targetフォルダーをクリーンアップし、すべてを最初から再生成します。これにより、安全でメンテナンス可能なビルドが可能になります。これで問題が解決することがわかります。生成されたクラスはビルドの前に削除されるため、次のビルド時に正しく再生成されます。

もちろん、この生成プロセスが長く、毎回行いたくない場合は、mvn installだけでMavenを実行し、以前に生成されたクラスを削除しないようにプラグインを設定する clearOutputDir からfalseへ。ただし、ビルドはわずかに高速になりますが、更新された場合、XSDで後続のエラーを検出できない場合があることに注意してください。

13
Tunaki