2011-08-17 11 views
5

最新バージョンのjaxb:2.2.4-1を使用する必要がありますが、mavenまたはmaven-jaxb2-pluginはJDKから取得するようです。 maven-jaxb2-pluginでJAXBのバージョンを指定する方法は?

は、私はこのようなバージョンを指定しようとした:

<configuration> 
    <specVersion>2.2</specVersion> 
    ... 
</configuration> 

をしかし、ログは読み:JAXB-API:

[INFO] [jaxb2:generate {execution: common}] 
[INFO] Started execution. 
[INFO] JAXB API is loaded from the [jar:file:/opt/jdk1.6.0_24/jre/lib/rt.jar!]. 
[INFO] Detected JAXB API version [2.1]. 

私が持つjavax.xml.bindの正しいバージョンに依存関係を追加しようとしましたcom.sun.xml.bind:jaxb-implですが、それは役に立ちませんでした。

<plugins> 
    <plugin> 
     <groupId>org.jvnet.jaxb2.maven2</groupId> 
     <artifactId>maven-jaxb2-plugin</artifactId> 
     <version>0.8.0</version> 

     <dependencies> 
      <dependency> 
       <groupId>javax.xml.bind</groupId> 
       <artifactId>jaxb-api</artifactId> 
       <version>2.2.4</version> 
      </dependency> 

      <dependency> 
       <groupId>com.sun.xml.bind</groupId> 
       <artifactId>jaxb-impl</artifactId> 
       <version>2.2.4-1</version> 
      </dependency> 
     </dependencies> 

     <executions> 
      <execution> 
       <id>common</id> 
       <goals> 
        <goal>generate</goal> 
       </goals> 
       <configuration> 
        <specVersion>2.2</specVersion> 
        ... 
       </configuration> 
      </execution> 
     </executions> 
    </plugin> 
</plugins> 

また、maven-jaxb22-pluginを使用してみましたが、動作しませんでした。

答えて

2

次のコードは、netbeansが生成するデフォルトのwebappから変更されています。依存プラグインを使用してjarを一時フォルダにコピーし、このフォルダをjdkの実装をオーバーライドするようにコンパイラの推奨ディレクトリとして指定します。

<properties> 
    <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir> 
</properties> 

... 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>2.3.2</version> 
      <configuration> 
       <compilerArguments> 
        <endorseddirs>${endorsed.dir}</endorseddirs> 
       </compilerArguments> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-dependency-plugin</artifactId> 
      <version>2.1</version> 
      <executions> 
       <execution> 
        <phase>validate</phase> 
        <goals> 
         <goal>copy</goal> 
        </goals> 
        <configuration> 
         <outputDirectory>${endorsed.dir}</outputDirectory> 
         <silent>true</silent> 
         <artifactItems> 
          <artifactItem> 
           <groupId>javax.xml.bind</groupId> 
           <artifactId>jaxb-api</artifactId> 
           <version>2.2.4</version> 
           <type>jar</type> 
          </artifactItem> 
          <artifactItem> 
           <groupId>com.sun.xml.bind</groupId> 
           <artifactId>jaxb-impl</artifactId> 
           <version>2.2.4-1</version> 
           <type>jar</type> 
          </artifactItem> 
         </artifactItems> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 
+0

興味深い考えです。私はそれを試してみます。 一方、私はantrunを使用することに戻りました...それは動作しますが、それはあまり良くありません。 – ivant

+0

私もこのアプローチを試みましたし、特定のmaven-jaxb22-プラグインを使用していましたが、JDKで検出されたバージョンを取得しています。 – Lyle

0

私はヨルンのソリューションを使用しようとしましたが、私は、プラグインから占いメッセージが表示されましたようにMaven-JAXB2-プラグインは、先に行って、とにかくrt.jarのバージョンを使用するように見える:[INFO] JAXB APIです[jar:file:/ C:/jdk1.6.0_25/jre/lib/rt.jar!]からロードされます。

ソリューションの私の失敗したバージョンは、それが依存関係のプラグインを使用する方法が若干異なっているが、それが成功したビルドの一部だ...

<properties> 
    <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir> 
    <v.jaxb2-api>2.2.4</v.jaxb2-api> 
    <v.jaxb2-impl>2.2.4-1</v.jaxb2-impl> 
    <v.jaxb2-xjc>2.2.4-1</v.jaxb2-xjc> 
    <v.jaxb2-basics-jaxb>2.1.13.MR2</v.jaxb2-basics-jaxb> 
</properties> 
... 
<build> 
    <plugins> 
    <plugin> 
     <artifactId>maven-dependency-plugin</artifactId> 
     <executions> 
     <execution> 
      <id>copy-dependencies</id> 
      <phase>validate</phase> 
      <goals> 
      <goal>copy-dependencies</goal> 
      </goals> 
      <configuration> 
      <outputDirectory>${endorsed.dir}</outputDirectory> 
      <excludeTransitive>true</excludeTransitive> 
      <includeArtifactIds>jaxb-api,jaxb-impl</includeArtifactIds> 
      </configuration> 
     </execution> 
     </executions> 
    </plugin> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <version>2.3.2</version> 
     <configuration>       
     <source>1.6</source> 
     <target>1.6</target> 
     <fork>true</fork> 
     <meminitial>256m</meminitial> 
     <maxmem>768m</maxmem> 
     <compilerArguments> 
      <endorseddirs>${endorsed.dir}</endorseddirs> 
     </compilerArguments> 
     </configuration> 
    </plugin> 
    </plugins> 
</build> 
+0

デバッグ情報(オプション-X)を付けてmavenを実行して、何が起こるかを見てください。これは、問題がどこにあり、どのように修正するかをあなたに知らせるかもしれません。 – ivant

0

ちょっとだけ、私は時間を節約したいです人。
jaxb-implで作業する人、バージョン2.2.4-1のバグを修正するためのバージョンjaxb-impl 2.2.4-1、META-INFフォルダの下にあるistack-commons-runtimeのpomこのバージョンはスナップショットではないため、親pom 2.4-SNAPSHOTへの参照がjsut 2.4である必要があります。あなたがあなたのローカルリポジトリ上のすべてのものを追加する場合を除き、あなたは、このエラーで粉砕されますスナップショットでは動作しない場合

<parent> 
    <groupId>com.sun.istack</groupId> 
    <artifactId>istack-commons</artifactId> 
    <version>2.4-SNAPSHOT</version> 
</parent> 

あなたが瓶のポンポンに手動でこのバージョンを更新する必要があります。 歓声、 マヌエル。

関連する問題