2014-11-07 2 views
2

Я пытаюсь обновить до JPA 2.1 в проекте eclipse, который использует maven, jpa, hibernate и hyperjaxb. Я получаю следующее сообщение об ошибке, когда я пытаюсь сделать Run As..Run on Server изнутри затмения:upgrade hyperjaxb3 to jpa 2.1

java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index; 

Я побежал mvn dependency:tree на корневой папке проекта и проблема, кажется, что hyperjaxb3 использует JPA 2.0, который вступает в противоречие с JPA 2.1. Есть ли способ заставить hyperjaxb3 использовать JPA 2.1? Или есть какой-то другой способ разрешить эту ошибку, чтобы мое приложение могло иметь преимущества JPA 2.1 без необходимости удаления hyperjaxb3?

Вот результат я получил от mvn dependency:tree в корневой папке проекта Eclipse из командного окна строки:

[INFO] 
[INFO] ------------------------------------------------------------------------ 
[INFO] Building MyApp 1.0.0-SNAPSHOT 
[INFO] ------------------------------------------------------------------------ 
[WARNING] The artifact org.apache.commons:commons-io:jar:1.3.2 has been relocated to commons-io:commons-io:jar:1.3.2 
[INFO] 
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ MyApp --- 
[WARNING] The artifact org.apache.commons:commons-io:jar:1.3.2 has been relocated to commons-io:commons-io:jar:1.3.2 
[INFO] org.springframework.samples:MyApp:war:1.0.0-SNAPSHOT 
[INFO] +- org.jvnet.hyperjaxb3:hyperjaxb3-ejb-runtime:jar:0.6.0:compile 
[INFO] | +- org.apache.commons:commons-lang3:jar:3.2.1:compile 
[INFO] | \- org.jvnet.jaxb2_commons:jaxb2-basics-runtime:jar:0.8.2:compile 
[INFO] +- org.jvnet.hyperjaxb3:hyperjaxb3-ejb-roundtrip:jar:0.6.0:compile 
[INFO] | +- org.hibernate.javax.persistence:hibernate-jpa-2.0-api:jar:1.0.0.Final:compile 
[INFO] | +- org.jvnet.jaxb2_commons:jaxb2-basics-testing:jar:0.8.2:compile 
[INFO] | | +- xmlunit:xmlunit:jar:1.0:compile 
[INFO] | | \- org.jvnet.jaxb2_commons:jaxb2-basics-tools:jar:0.8.2:compile 
[INFO] | |  \- commons-logging:commons-logging:jar:1.1.1:compile 
[INFO] | \- org.slf4j:slf4j-log4j12:jar:1.6.1:compile 
[INFO] |  \- log4j:log4j:jar:1.2.16:compile 
[INFO] +- org.jadira.usertype:usertype.core:jar:3.1.0.CR8:compile 
[INFO] | \- org.jadira.usertype:usertype.spi:jar:3.1.0.CR8:compile 
[INFO] +- javax.servlet:jstl:jar:1.2:compile 
[INFO] +- javax.servlet:servlet-api:jar:2.5:provided 
[INFO] +- javax.servlet.jsp:jsp-api:jar:2.2:provided 
[INFO] +- org.springframework.data:spring-data-jpa:jar:1.6.4.RELEASE:compile 
[INFO] | +- org.springframework.data:spring-data-commons:jar:1.8.4.RELEASE:compile 
[INFO] | +- org.springframework:spring-context:jar:4.0.6.RELEASE:compile 
[INFO] | +- org.springframework:spring-beans:jar:4.0.6.RELEASE:compile 
[INFO] | +- org.springframework:spring-core:jar:4.0.6.RELEASE:compile 
[INFO] | \- org.slf4j:jcl-over-slf4j:jar:1.7.7:runtime 
[INFO] +- org.springframework:spring-jdbc:jar:4.0.6.RELEASE:compile 
[INFO] +- org.springframework:spring-aop:jar:4.0.6.RELEASE:compile 
[INFO] | \- aopalliance:aopalliance:jar:1.0:compile 
[INFO] +- org.springframework:spring-webmvc:jar:4.0.6.RELEASE:compile 
[INFO] | +- org.springframework:spring-expression:jar:4.0.6.RELEASE:compile 
[INFO] | \- org.springframework:spring-web:jar:4.0.6.RELEASE:compile 
[INFO] +- org.springframework:spring-tx:jar:4.0.6.RELEASE:compile 
[INFO] +- org.springframework:spring-context-support:jar:4.0.6.RELEASE:compile 
[INFO] +- org.springframework:spring-orm:jar:4.0.6.RELEASE:compile 
[INFO] +- org.springframework:spring-oxm:jar:4.0.6.RELEASE:compile 
[INFO] +- org.springframework:spring-jms:jar:4.0.6.RELEASE:compile 
[INFO] +- org.apache.tomcat:tomcat-jdbc:jar:7.0.42:runtime 
[INFO] | \- org.apache.tomcat:tomcat-juli:jar:7.0.42:runtime 
[INFO] +- org.slf4j:slf4j-api:jar:1.7.5:compile 
[INFO] +- ch.qos.logback:logback-classic:jar:1.0.13:runtime 
[INFO] | \- ch.qos.logback:logback-core:jar:1.0.13:runtime 
[INFO] +- joda-time:joda-time:jar:2.3:compile 
[INFO] +- joda-time:joda-time-hibernate:jar:1.3:compile 
[INFO] +- joda-time:joda-time-jsptags:jar:1.1.1:compile 
[INFO] +- org.jadira.usertype:usertype.jodatime:jar:2.0.1:compile 
[INFO] +- mysql:mysql-connector-java:jar:5.1.27:compile 
[INFO] +- org.hibernate:hibernate-entitymanager:jar:4.2.1.Final:compile 
[INFO] | +- org.jboss.logging:jboss-logging:jar:3.1.0.GA:compile 
[INFO] | +- org.hibernate:hibernate-core:jar:4.2.1.Final:compile 
[INFO] | | \- antlr:antlr:jar:2.7.7:compile 
[INFO] | +- dom4j:dom4j:jar:1.6.1:compile 
[INFO] | +- org.jboss.spec.javax.transaction:jboss-transaction api_1.1_spec:jar:1.0.1.Final:compile 
[INFO] | +- org.javassist:javassist:jar:3.15.0-GA:compile 
[INFO] | \- org.hibernate.common:hibernate-commons-annotations:jar:4.0.1.Final:compile 
[INFO] +- org.hibernate:hibernate-validator:jar:5.1.1.Final:compile 
[INFO] | +- javax.validation:validation-api:jar:1.1.0.Final:compile 
[INFO] | \- com.fasterxml:classmate:jar:1.0.0:compile 
[INFO] +- org.hibernate:hibernate-ehcache:jar:4.2.1.Final:compile 
[INFO] +- net.sf.ehcache:ehcache-core:jar:2.6.6:compile 
[INFO] +- org.webjars:bootstrap:jar:2.3.0:compile 
[INFO] +- org.webjars:jquery-ui:jar:1.10.3:compile 
[INFO] +- org.webjars:jquery:jar:2.0.3-1:compile 
[INFO] +- org.springframework:spring-test:jar:4.0.6.RELEASE:test 
[INFO] +- junit:junit:jar:4.11:test 
[INFO] | \- org.hamcrest:hamcrest-core:jar:1.3:test 
[INFO] +- org.hamcrest:hamcrest-library:jar:1.3:test 
[INFO] +- org.aspectj:aspectjrt:jar:1.7.4:compile 
[INFO] +- org.aspectj:aspectjweaver:jar:1.7.4:runtime 
[INFO] +- com.github.dandelion:datatables-jsp:jar:0.9.2:compile 
[INFO] | \- com.github.dandelion:datatables-core:jar:0.9.2:compile 
[INFO] |  +- com.googlecode.json-simple:json-simple:jar:1.1.1:compile 
[INFO] |  \- commons-beanutils:commons-beanutils:jar:1.8.3:compile 
[INFO] +- com.github.dandelion:datatables-export-itext:jar:0.9.2:compile 
[INFO] | \- com.itextpdf:itextpdf:jar:5.3.4:compile 
[INFO] +- com.github.dandelion:datatables-servlet2:jar:0.9.2:compile 
[INFO] +- commons-fileupload:commons-fileupload:jar:1.2:compile 
[INFO] +- commons-io:commons-io:jar:1.3.2:compile 
[INFO] +- commons-lang:commons-lang:jar:2.6:compile 
[INFO] +- org.apache.tiles:tiles-jsp:jar:2.1.3:compile 
[INFO] | \- org.apache.tiles:tiles-servlet:jar:2.1.3:compile 
[INFO] |  \- org.apache.tiles:tiles-core:jar:2.1.3:compile 
[INFO] |  +- org.apache.tiles:tiles-api:jar:2.1.3:compile 
[INFO] |  \- commons-digester:commons-digester:jar:1.8.1:compile 
[INFO] +- org.springframework.security:spring-security-core:jar:3.2.2.RELEASE:compile 
[INFO] +- org.springframework.security:spring-security-web:jar:3.2.2.RELEASE:compile 
[INFO] +- org.springframework.security:spring-security-config:jar:3.2.2.RELEASE:compile 
[INFO] +- org.springframework.security:spring-security-taglibs:jar:3.2.2.RELEASE:compile 
[INFO] | \- org.springframework.security:spring-security-acl:jar:3.2.2.RELEASE:compile 
[INFO] +- org.eclipse.emf:ecore:jar:2.2.3:compile 
[INFO] \- org.eclipse.emf:common:jar:2.2.3:compile 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESS 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 9.805s 
[INFO] Finished at: Thu Nov 06 12:32:32 PST 2014 
[INFO] Final Memory: 14M/124M 
[INFO] ------------------------------------------------------------------------ 
+0

Не могли бы вы указать, какую зависимость JPA 2.1 вы хотите использовать? Я имею в виду 'groupId: artifactId'. – lexicore

+0

Хорошо, я буду считать ['org.hibernate.javax.persistence':' hibernate-jpa-2.1-api'] (http://mvnrepository.com/artifact/org.hibernate.javax.persistence/hibernate-jpa -2.1-api) и ['org.hibernate: hibernate-entitymanager: 4.3.7.Final'] (http://mvnrepository.com/artifact/org.hibernate/hibernate-entitymanager/4.3.7.Final). – lexicore

ответ

1

Вы получаете конфликтующую org.hibernate.javax.persistence:hibernate-jpa-2.0-api из-за org.jvnet.hyperjaxb3:hyperjaxb3-ejb-roundtrip зависимости, которая имеет его в compile объеме , На самом деле это неверно, should beprovided. hyperjaxb3-ejb-roundtrip может с уверенностью предположить, что предусмотрены JPA API, а также hyperjaxb3-ejb-runtime. Это будет исправлено в будущей версии.

Прежде всего, убедитесь, что вам действительно нужно hyperjaxb3-ejb-roundtrip. Это необходимо только в том случае, если вы создаете тестовый пример с обратным просмотром - который на самом деле предназначен только для «игровой площадки». В производственных проектах вам это обычно не нужно. Таким образом, вы можете очень хорошо отключить генерацию тестового сценария на обочине и удалить зависимость hyperjaxb3-ejb-roundtrip.

Далее, если вам нужно hyperjaxb3-ejb-roundtrip вы можете использовать механизм Maven по dependency exclusion исключить hibernate-jpa-2.0-api зависимости от того транзитивно исключены из-за hyperjaxb3-ejb-roundtrip. Это будет выглядеть примерно так:

<dependency> 
    <groupId>org.jvnet.hyperjaxb3</groupId> 
    <artifactId>hyperjaxb3-ejb-roundtrip</artifactId> 
    <exclusions> 
     <exclusion> 
      <groupId>org.hibernate.javax.persistence</groupId> 
      <artifactId>hibernate-jpa-2.0-api</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency> 

Если вы уже включают в себя hyperjaxb3-ejb-runtime напрямую, вы можете также исключить его из hyperjaxb3-ejb-roundtrip.

Далее, я только что попробовал совместимость JPA 2.1 в this test project. Мне пришлось обновить hsqldb до 2.3.2, но кроме того, он работал с hibernate-entitymanager версии 4.3.7.Final и hibernate-jpa-2.1-api версии 1.0.0.Final. Тест не , особенно, но это хороший признак того, что Hyperjaxb совместим с JPA 2.1. JPA 2.1, скорее всего, обратно совместим с JPA 2.0, поэтому на самом деле код, созданный Hyperjaxb, должен быть совместим с JPA 2.1.

У меня есть два вопроса, один из которых - только move Hyperjaxb to JPA 2.1, а другой - support new JPA 2.1 features.

Перемещение к JPA 2.1 должно быть довольно простым, так как оно (надеюсь) требует обновления версий зависимостей, а в некоторых случаях (например, hibernate-jpa-2.x-api) также является идентификаторами артефакта. HSQLDB должен быть обновлен до org.hsqldb:hsqldb версии 2.3.2 и позже, но это не имеет большого значения. Я буду реализовывать его в следующем выпуске.

Поддержка новых функций JPA 2.1 намного больше.


Теперь небольшая ремарка.При публикации ссылок на jumpshare другие внешние ресурсы, пожалуйста, четко укажите лицензию или юридический статус связанного ресурса. Я буду консультироваться с pro bono только по источникам, которые можно было бы безопасно добавить в качестве тестов или образцов в проект в интересах всех пользователей.

Смежные вопросы