2017-09-11 7 views
0

私はMavenプラグインの実行順序と生成されたクラスのパッケージ化で頭を悩ましてきました。Mavenプラグインの実行順序とクラスバンドル

私は注釈とXSDからPOJOを生成し、そのために私はbinding.xjbを消費のmaven-JAXB2 - プラグイン(注釈されるべき完全に分類されたフィールド名からなるXMLファイルを使用しているの要件をしました)ファイルを生成し、生成されたpojosにアノテーションを追加します。これに加えて、マッピングファイルからbinding.xjbファイルを動的に生成するためのメカニズムがありますが、yamlファイルフォーマットでマッピングを提供するだけです。binding.xjb ymlを維持するのは簡単だからですファイルの場合、私はyamlファイルを読み込み、binding.xjbファイルを生成するスタンドアロンのバネ起動アプリケーションを持っています。exec-maven-pluginの前に私のアプリを呼び出すにはmaven-jaxb2-pluginバインディング.xjbはあらかじめ生成されており、maven-jaxb2-pluginによってpojosに注釈を付けることができます。

そして私は、私はプロセスのクラスに相を使用していますし、このの助けを借りてのPOJOをアノテーションで生成された手間を避けるために、彼らは、同じ位相に宣言する必要がありますプラグインの実行順序を維持することを知っています。

しかし、問題は生成されたクラスがjarにパックされていないことです。また、生成されたjarファイルからbinding.xjb生成ロジックを除外したいと考えています。私のビルド構成は以下のようになります

: -

<build> 
    <defaultGoal>install</defaultGoal> 
    <plugins> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>exec-maven-plugin</artifactId> 
      <version>1.6.0</version> 
      <executions> 
       <execution> 
        <phase>process-classes</phase> 
        <goals> 
         <goal>java</goal> 
        </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <mainClass>com.abc.GeneratorApp</mainClass> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.jvnet.jaxb2.maven2</groupId> 
      <artifactId>maven-jaxb2-plugin</artifactId> 
      <version>${maven-jaxb2-plugin.version}</version> 
      <executions> 
       <execution> 
        <phase>process-classes</phase> 
        <goals> 
         <goal>generate</goal> 
        </goals> 
       </execution> 
      </executions> 

      <configuration> 
       <extension>true</extension> 
       <args> 
        <arg>-XautoNameResolution</arg> 
        <arg>-Xannotate</arg> 
       </args> 
       <schemas> 
        <schema> 
         <fileset> 
          <directory>src/main/xsd</directory> 
          <includes> 
           <include>PATH-TO-XSD/my.xsd</include> 
          </includes> 
         </fileset> 
        </schema> 
       </schemas> 
       <bindings> 
        <binding> 
         <fileset> 
          <directory>src/main/xsd</directory> 
          <includes> 
           <include>*.xjb</include> 
          </includes> 
         </fileset> 
        </binding> 
       </bindings> 
       <plugins> 
        <plugin> 
         <groupId>org.jvnet.jaxb2_commons</groupId> 
         <artifactId>jaxb2-basics-annotate</artifactId> 
         <version>0.6.4</version> 
        </plugin> 
        <plugin> 
         <groupId>com.abc.xyz</groupId> 
         <artifactId>my-api</artifactId> 
         <version>1.2.3</version> 
        </plugin> 
       </plugins> 
      </configuration> 
     </plugin> 
    </plugins> 

誰かが私が作っているどの間違え私を指すか、この問題を解決するための提案を提供し、事前に感謝していただけます。

答えて

0

コード生成は通常generate-sourcesフェーズで行われます。なぜあなたがprocess-classesを好むかわからない

同じ段階のプラグインの順番は、実際にはpom.xmlにリストされている順番である必要があります。したがって、maven-jaxb2-pluginの前にexec-maven-pluginを実行する必要があります。私はMaven 3の初期のバージョンでこれにバグがあり、3.0.3+で修正されていたはずです。

何も役に立たない場合は、exec-maven-plugingenerate-sourcesmaven-jaxb2-pluginからprocess-sourcesのように早い段階に移動してください。

+0

ビューをお寄せいただきありがとうございますが、生成元フェーズではクラスを使用することはできませんが、別のMavenプラグインを作成してmaven-jaxb2-pluginの前に呼び出す別のソリューションを選択しました。 。 – Apollo

+0

@Apollo別のモジュールでスキーマをコンパイルするのがよい方法です。 – lexicore

+0

このような素晴らしいMaven-jaxb2-pluginに感謝します。 – Apollo