2011-08-17 31 views
5

Tôi cần sử dụng phiên bản mới nhất jaxb: 2.2.4-1, nhưng maven hoặc maven-jaxb2-plugin có vẻ như đã chọn một phiên bản từ JDK.Cách chỉ định phiên bản JAXB trong plugin maven-jaxb2?

tôi đã cố gắng xác định các phiên bản như thế này:

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

nhưng các bản ghi đọc:

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

Tôi cố gắng để thêm phụ thuộc vào phiên bản chính xác của javax.xml.bind: jaxb-api và com.sun.xml.bind: jaxb-impl, nhưng điều đó không giúp được gì.

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

Tôi cũng đã thử sử dụng plugin maven-jaxb22 nhưng cũng không hoạt động.

Trả lời

2

Mã sau đây được điều chỉnh từ ứng dụng web mặc định mà netbeans tạo. Nó sử dụng plugin phụ thuộc để sao chép các jars vào một thư mục tạm thời và chỉ định thư mục này làm thư mục xác nhận cho trình biên dịch để nó ghi đè việc triển khai thực hiện trong 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

Ý tưởng thú vị. Tôi sẽ thử nó. Trong khi đó, tôi hoàn nguyên để sử dụng antrun ... Nó hoạt động nhưng nó không phải là rất tốt đẹp. – ivant

+0

Tôi đã thử phương pháp này là tốt, và thậm chí sử dụng maven-jaxb22-plugin cụ thể nhưng tôi vẫn nhận được phiên bản phát hiện JDK. – Lyle

0

tôi cố gắng sử dụng giải pháp Jörn, nhưng có vẻ như maven-jaxb2-plugin đã đi trước và sử dụng phiên bản rt.jar dù sao, như tôi nhận được thông báo kể từ plugin: [INFO] JAXB API được tải từ [jar: file:/C: /jdk1.6.0_25/jre/lib/rt.jar!].

phiên bản thành công của tôi trong những giải pháp là hơi khác nhau trong cách nó sử dụng các plugin phụ thuộc, nhưng đó là một phần của việc xây dựng thành công mà ...

<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

Thử chạy maven với thông tin gỡ lỗi (tùy chọn -X) để xem điều gì xảy ra. Điều này có thể cung cấp cho bạn ý tưởng về sự cố và cách khắc phục sự cố. – ivant

0

hey chỉ tôi muốn tiết kiệm thời gian của những người.
cho những người làm việc trên jaxb-impl, phiên bản jaxb-impl 2.2.4-1 có nghĩa là sửa lỗi của phiên bản 2.2.4, pom của thời gian chạy istack-commons trong Thư mục META-INF chứa một tham chiếu đến pom 2.4-SNAPSHOT cha mẹ của nó khi nó nên được jsut 2.4, do phiên bản này không phải là một bản chụp.

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

vì vậy nếu bạn không muốn làm việc với ảnh chụp bạn sẽ đập vỡ với lỗi này, trừ khi bạn muốn thêm tất cả mọi thứ trên kho lưu trữ địa phương của bạn, bạn có thể phải cập nhật thủ công phiên bản này vào pom trên jar. cổ vũ, Manuel.

Các vấn đề liên quan