2011-08-17 14 views
5

Potrzebuję używać najnowszej wersji jaxb: 2.2.4-1, ale dodatek maven lub maven-jaxb2 wydaje się pobierać tę z JDK.Jak określić wersję JAXB w wtyczce maven-jaxb2?

Próbowałem określa wersję takiego:

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

ale dzienniki czytać:

[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]. 

Próbowałem dodać zależności do poprawnych wersji javax.xml.bind: JAXB-API i com.sun.xml.bind: jaxb-impl, ale to nie pomogło.

<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> 

Próbowałem również używać wtyczki maven-jaxb22, ale też nie działało.

Odpowiedz

2

Poniższy kod jest dostosowywany z domyślnej aplikacji internetowej generowanej przez netbeans. Korzysta z wtyczki zależności, aby skopiować słoiki do folderu tymczasowego i określa ten folder jako aprobowany katalog dla kompilatora, więc zastępuje implementację w 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

Interesujący pomysł. Spróbuję tego. Tymczasem wróciłem do korzystania z antrun ... Działa, ale nie jest zbyt miły. – ivant

+0

Próbowałem również tego podejścia, a nawet używając konkretnej wtyczki maven-jaxb22, ale wciąż otrzymuję wersję wykrytą przez JDK. – Lyle

0

I próbował użyć rozwiązanie Jorn, ale wygląda na to, maven-plugin-jaxb2 poszedł do przodu i używane wersję rt.jar tak, jak mam komunikat informujący z pluginem: [INFO] JAXB API ładowane z pliku [jar: file:/C: /jdk1.6.0_25/jre/lib/rt.jar!].

Moja nieudana wersja rozwiązania jest nieco inna w jaki sposób używa wtyczki zależnościach, ale jest to jeden z elementów budowy, który udaje ...

<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

Spróbuj uruchomić program z informacjami o debugowaniu (opcja -X), aby zobaczyć, co się stanie. To może dać ci pojęcie, gdzie jest problem i jak go naprawić. – ivant

0

hej właśnie chcę zapisać porze ludzie.
dla osób, które pracują na jaxb-impl, wersja jaxb-impl 2.2.4-1, która ma naprawić błąd wersji 2.2.4, pom z istack-commons-runtime w folderze META-INF zawiera odniesienie do jego nadrzędnej pom 2.4-SNAPSHOT, kiedy powinno być jsut 2.4, ponieważ ta wersja nie jest migawką.

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

więc jeśli nie chcą pracować z migawka będzie rozbić z tego błędu, chyba że chcesz dodać wszystko na lokalnym repozytorium może trzeba aktualizować ręcznie tę wersję do pom na słoiku. okrzyki, Manuel.