2016-02-06 11 views
5

XSDからJavaファイルを生成しようとしていますが、以下のコードは生成されません。 outputDirectoryのコメントを外すと機能しますが、まずフォルダを削除します。 clearOutputDir = falseを追加しても何も生成されません。JAXB mavenプラグインでクラスが生成されない

<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. 
+0

sourceフォルダには生成しないでください。target/generated-sources/xjc – jah

+0

はい私はoutputDirectoryにコメントしましたが、ソースを生成して同じ情報メッセージを与えていません。 – krmanish007

答えて

6

最初の事はあなたが、これまでに、src/main/java内のコードを生成してはならないということです。生成されたコードはバージョン管理されてはならず、とにかく再生成されるため、いつでも削除することができます。

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

Mavenを実行するときは、mvn clean installで実行します:targetフォルダをクリーニングし、すべてをゼロから再生成します。これにより、安全でメンテナンス可能なビルドが実現します。これにより、問題が解決されることがわかります。生成されたクラスはビルド前に削除されるため、次のビルド時に正しく再生成されます。もちろん

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

+0

私はそれを生成するためにmvnコンパイルを使用していましたが、同じコードはmvnクリーンコンパイルを試した後に動作しました。 – krmanish007

+0

@ krmanish007私の警告は覚えておいてください。 'src/main/java'の中にコードを生成すると、あなたのために苦痛と苦痛にしかなりません! :) – Tunaki

+0

それは最初からコメントされた理由です。私は、それが生成するのに役立つかどうかを確認するために追加し、再度コメントしました。 – krmanish007

関連する問題