2009-05-18 28 views
19

Tôi đang gặp sự cố khi thiết lập bộ tăng cường dữ liệu để sử dụng với dự án công cụ ứng dụng của google. Nếu tôi sử dụng các plugin eclipse datanucleus mọi thứ diễn ra tốt đẹp, nhưng trong dự án maven của tôi, tôi nhận được một lỗi phiên bản mâu thuẫn lạ.Các phiên bản xung đột của tăng cường nhân tố cơ trong dự án động cơ ứng dụng google maven

POM của tôi có những DataNucleus tham khảo:

<dependency> 
    <groupId>org.datanucleus</groupId> 
    <artifactId>datanucleus-core</artifactId> 
    <version>1.1.0</version> 
</dependency> 

... 

<plugin> 
    <groupId>org.datanucleus</groupId> 
    <artifactId>maven-datanucleus-plugin</artifactId> 
    <version>1.1.0</version> 
    <configuration> 
     <mappingIncludes>**/*.class</mappingIncludes> 
     <verbose>true</verbose> 
     <enhancerName>ASM</enhancerName> 
     <api>JDO</api> 
    </configuration> 
    <executions> 
     <execution> 
     <phase>compile</phase> 
     <goals> 
      <goal>enhance</goal> 
     </goals> 
     </execution> 
    </executions> 
</plugin> 

Khi tôi cố gắng xây dựng các dự án tôi nhận được lỗi sau:

 
Exception in thread "main" Plugin (Bundle) "org.datanucleus" is already registered. 
Ensure you dont have multiple JAR versions of the same plugin in the classpath. The URL "file:/Users/drome/.m2/repository/org/datanucleus/datanucleus-core/1.1.0/**datanucleus-core-1.1.0.jar**" is already registered, and you are trying to register an identical plugin located at URL "file:/Users/drome/.m2/repository/org/datanucleus/datanucleus-core/1.1.3/**datanucleus-core-1.1.3.jar**." 
org.datanucleus.exceptions.NucleusException: Plugin (Bundle) "org.datanucleus" is already registered. Ensure you dont have multiple JAR versions of the same plugin in the classpath. The URL "file:/Users/drome/.m2/repository/org/datanucleus/datanucleus-core/1.1.0/datanucleus-core-1.1.0.jar" is already registered, and you are trying to register an identical plugin located at URL "file:/Users/drome/.m2/repository/org/datanucleus/datanucleus-core/1.1.3/datanucleus-core-1.1.3.jar." 
at org.datanucleus.plugin.NonManagedPluginRegistry.registerBundle(NonManagedPluginRegistry.java:437) 
at org.datanucleus.plugin.NonManagedPluginRegistry.registerBundle(NonManagedPluginRegistry.java:343) 
at org.datanucleus.plugin.NonManagedPluginRegistry.registerExtensions(NonManagedPluginRegistry.java:227 
) 
at org.datanucleus.plugin.NonManagedPluginRegistry.registerExtensionPoints(NonManagedPluginRegistry.jav 
a:159) 
at org.datanucleus.plugin.PluginManager.registerExtensionPoints(PluginManager.java:82) 
at org.datanucleus.OMFContext.(OMFContext.java:164) 
at org.datanucleus.enhancer.DataNucleusEnhancer.(DataNucleusEnhancer.java:171) 
at org.datanucleus.enhancer.DataNucleusEnhancer.(DataNucleusEnhancer.java:149) 
at org.datanucleus.enhancer.DataNucleusEnhancer.main(DataNucleusEnhancer.java:1157) 

Tôi không hiểu tại sao DataNucleus cần maven tải DataNucleus -core-1.1.3.jar vì điều này không được tham chiếu trong pom.xml

Tôi cũng không hiểu tại sao datanucleus-core-1.1.3.jar đang được đăng ký ...

Bất kỳ ý tưởng nào? Cảm ơn trước ...

Trả lời

6

Plugin DN M2 kéo trong các phiên bản mới nhất của các lọ DN có sẵn mà nó cần thực hiện công việc của mình (không có cách nào hợp lý để thực hiện việc này ngoài cách sử dụng mới nhất). Bạn muốn hạn chế "cốt lõi" lên một phiên bản khác nhau, hoặc là bằng cách xác định sự phụ thuộc plugin của lõi, hoặc bằng cách xác định rằng trong ứng dụng của bạn để

<dependency> 
    <groupId>org.datanucleus</groupId> 
    <artifactId>datanucleus-core</artifactId> 
    <version>1.1.0</version> 
    <scope>runtime</scope> 
</dependency> 
+0

Tôi không nghĩ rằng có thể loại trừ một phiên bản khác của cùng một tạo phẩm. nhóm một vật-một 1,0 nhóm c loại trừ-vật ivo

+1

Plugin DN M2 không chỉ hợp lý điều nó có thể làm ; sử dụng mới nhất. Tôi thấy không có cách nào khác để có một plugin M2 và không phải phát hành một phiên bản mới mỗi khi chúng tôi phát hành một phiên bản mới của một lọ phụ thuộc và là những gì phạm vi phiên bản M2 đã được giới thiệu cho. Những người khác đã không có xử lý này http://groups.google.com/group/google-appengine-java/browse_thread/thread/aeaffa3f33e1e4e2/095300c75cd9da39?lnk=gst&q=maven-datanucleus#095300c75cd9da39 Rõ ràng Google cập nhật vấn đề lọ plugin DN của họ có nghĩa là nó không liên quan. – DataNucleus

+0

Theo liên kết bạn đã cung cấp, thực sự thay đổi phạm vi thành 'thời gian chạy' đã khắc phục sự cố. Cảm ơn sự hỗ trợ :-) – ivo

5

Thật không may câu trả lời là "ẩn" trong các ý kiến:

<dependency> 
    <groupId>org.datanucleus</groupId> 
    <artifactId>datanucleus-core</artifactId> 
    <version>1.1.0</version> 
    <scope>runtime</scope> 
</dependency> 

Điều đó phù hợp với tôi!

0

xóa phiên bản cũ của datanucleus khỏi kho lưu trữ maven cục bộ của bạn cũng giải quyết được vấn đề.

2

Tôi đã gặp sự cố tương tự trong khi thử nghiệm nguyên mẫu plugin của maven gae.

tôi cố định nó bằng cách thêm loại trừ trong gae runtime bắc cầu phụ thuộc của tôi

<!-- Google App Engine meta-package --> 
     <dependency> 
      <groupId>net.kindleit</groupId> 
      <artifactId>gae-runtime</artifactId> 
      <version>${gae.version}</version> 
      <type>pom</type> 
      <exclusions> 
       <exclusion> 
        <groupId>com.google.appengine.orm</groupId> 
        <artifactId>datanucleus-core</artifactId> 
       </exclusion> 

      </exclusions> 
     </dependency> 

và sau đó thêm các lõi hạt nhân như một sự phụ thuộc thời gian chạy

<dependency> 
      <groupId>org.datanucleus</groupId> 
      <artifactId>datanucleus-core</artifactId> 
      <version>${datanucleus-core.version}</version> 
      <scope>runtime</scope> 
      <exclusions> 
       <exclusion> 
        <groupId>javax.transaction</groupId> 
        <artifactId>transaction-api</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 

như giữ phần Plugin gae đơn giản:

<plugin> 
       <groupId>org.datanucleus</groupId> 
       <artifactId>maven-datanucleus-plugin</artifactId> 
       <version>${maven-datanucleus-plugin.version}</version> 
       <configuration> 
        <!-- 
         Make sure this path contains your persistent classes! 
        --> 
        <mappingIncludes>**/model/*.class</mappingIncludes> 
        <verbose>true</verbose> 
        <enhancerName>ASM</enhancerName> 
        <api>JDO</api> 
       </configuration> 
       <executions> 
        <execution> 
         <phase>compile</phase> 
         <goals> 
          <goal>enhance</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
2

Sau khi đọc "How to override a plugin's dependency in Maven", tôi đã tìm thấy một cách khác o sửa lỗi này. Đây là POM của tôi:

<plugin> 
    <groupId>org.datanucleus</groupId> 
    <artifactId>maven-datanucleus-plugin</artifactId> 
    <version>3.1.0-m3</version> 
    <configuration> 
    <verbose>true</verbose> 
    </configuration> 

    <executions> 
    <execution> 
     <phase>process-classes</phase> 
     <goals> 
     <goal>enhance</goal> 
     </goals> 
    </execution> 
    </executions> 

    <dependencies> 
    <dependency> 
     <groupId>org.datanucleus</groupId> 
     <artifactId>datanucleus-core</artifactId> 
     <version>3.0.4</version> 
    </dependency> 
    </dependencies> 
</plugin> 
+0

Tôi nghĩ rằng đây là câu trả lời lành mạnh hơn cho việc này. Sửa chữa phạm vi thời gian chạy không làm việc cho tôi anyway. Những gì tôi thực sự muốn là sửa chữa phiên bản của lõi dữ liệu được sử dụng bởi các enhancer để được giống như những gì được sử dụng bởi ứng dụng của tôi. – jpitt42

0

Maven-datanucleus-plugin đã ngừng kéo phiên bản mới nhất của lõi hạt nhân có sẵn kể từ phiên bản 3.1.1.

Kiểm tra sự khác biệt giữa các tệp POM cho Maven-datanucleus-plugin 3.1.1 (http://repo1.maven.org/maven2/org/datanucleus/maven-datanucleus-plugin/3.1.1/maven-datanucleus-plugin-3.1.1.pom) và 3.1.0-release (http://mvnrepository.com/artifact/org.datanucleus/maven-datanucleus-plugin/3.1.0-release).

Đối với maven-datanucleus-plugin 3.1.1 phạm vi phiên bản của phụ thuộc lõi-hạt nhân là (3.0.99, 3.1.99), và cho maven-datanucleus-plugin 3.1.0-phát hành nó là (3.0.99 ,). Không có gì lạ đối với các phiên bản cũ của maven-datanucleus-plugin, nó tự động kéo vào các phiên bản mới nhất của lõi-hạt nhân.

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