Как указать версию JAXB в maven-jaxb2-plugin? - PullRequest
5 голосов
/ 17 августа 2011

Мне нужно использовать последнюю версию jaxb: 2.2.4-1, но похоже, что maven или maven-jaxb2-plugin выбирает один из JDK.

Я попытался указать версию следующим образом:

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

но журналы читаются:

[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: jaxb-api и 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-, но он также не работал.

Ответы [ 3 ]

2 голосов
/ 18 августа 2011

Следующий код адаптирован из стандартного веб-приложения, которое генерирует netbeans. Он использует плагин зависимостей для копирования 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 голосов
/ 12 января 2012

эй, просто я хочу сэкономить время людей.
для людей, которые работают над jaxb-impl, версией jaxb-impl 2.2.4-1, которая предназначалась для исправления ошибки версии 2.2.4,pom istack-commons-runtime в папке META-INF содержит ссылку на родительский pom 2.4-SNAPSHOT, когда он должен быть jsut 2.4, поскольку эта версия не является снимком.

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

, поэтомуесли вы не хотите работать со снимком, вы разбьетесь с этой ошибкой, если вы не хотите добавлять все в свой локальный репозиторий, вам, возможно, придется обновить эту версию вручную в pom на банке.ура, Мануэль.

0 голосов
/ 14 октября 2011

Я попытался использовать решение Йорна, но похоже, что maven-jaxb2-plugin пошел дальше и все равно использовал версию rt.jar, так как я получил сообщение от плагина: [INFO] JAXB API загружается из [ баночка: файл: / 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>
...