NoSuchMethodError:javax.persistence.JoinColumn.foreignKey()
我试图在OpenShift(JBoss Enterprise application Platform 6)上部署我的应用程序,我得到了标题中提到的NoSuchMethodError。因此,我在谷歌上搜索了整件事,发现了一些文章或线程提到这个方法自JPA-API2.1以来就可用。我发现Openshift所必需的依赖项包含JPA-API2.0。我试图排除此依赖项,但它不起作用。有什么想法吗?请在下面找到pom.xmlNoSuchMethodError:javax.persistence.JoinColumn.foreignKey(),java,hibernate,maven,jpa,openshift,Java,Hibernate,Maven,Jpa,Openshift,我试图在OpenShift(JBoss Enterprise application Platform 6)上部署我的应用程序,我得到了标题中提到的NoSuchMethodError。因此,我在谷歌上搜索了整件事,发现了一些文章或线程提到这个方法自JPA-API2.1以来就可用。我发现Openshift所必需的依赖项包含JPA-API2.0。我试图排除此依赖项,但它不起作用。有什么想法吗?请在下面找到pom.xml <project xmlns="http://maven.apache.o
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>christmasmarkets</groupId>
<artifactId>christmasmarkets</artifactId>
<packaging>war</packaging>
<version>1.0</version>
<name>christmasmarkets</name>
<repositories>
<repository>
<id>eap</id>
<url>http://maven.repository.redhat.com/techpreview/all</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>springsource-repo</id>
<name>SpringSource Repository</name>
<url>http://repo.springsource.org/release</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>eap</id>
<url>http://maven.repository.redhat.com/techpreview/all</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.6</maven.compiler.source>
<maven.compiler.target>1.6</maven.compiler.target>
<spring.version>4.1.2.RELEASE</spring.version>
<hibernate.version>4.3.7.Final</hibernate.version>
<hibernate-annotations.version>3.5.6-Final</hibernate-annotations.version>
<hibernate-commons-annotations.version>3.2.0.Final</hibernate-commons-annotations.version>
<jackson.version>2.2.3</jackson.version>
<postgre.version>9.3-1102-jdbc41</postgre.version>
</properties>
<dependencies>
<dependency>
<groupId>org.jboss.spec</groupId>
<artifactId>jboss-javaee-6.0</artifactId>
<version>3.0.2.Final-redhat-4</version>
<type>pom</type>
<scope>provided</scope>
<exclusions>
<exclusion>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.0-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>${postgre.version}</version>
</dependency>
</dependencies>
<profiles>
<profile>
<!-- When built in OpenShift the 'openshift' profile will be used when
invoking mvn. -->
<!-- Use this profile for any OpenShift specific customization your app
will need. -->
<!-- By default that is to put the resulting archive into the 'deployments'
folder. -->
<!-- http://maven.apache.org/guides/mini/guide-building-for-different-environments.html -->
<id>openshift</id>
<build>
<finalName>christmasmarkets</finalName>
<plugins>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<configuration>
<outputDirectory>deployments</outputDirectory>
<warName>ROOT</warName>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
4.0.0
圣诞节市场
圣诞节市场
战争
1
圣诞节市场
eap
http://maven.repository.redhat.com/techpreview/all
真的
真的
springsource回购
SpringSource存储库
http://repo.springsource.org/release
eap
http://maven.repository.redhat.com/techpreview/all
真的
真的
UTF-8
1.6
1.6
4.1.2.1发布
4.3.7.最终版本
3.5.6-最终版本
3.2.0.1最终版本
2.2.3
9.3-1102-jdbc41
org.jboss.spec
jboss-javaee-6.0
3.0.2.Final-redhat-4
聚甲醛
假如
org.hibernate.javax.persistence
hibernate-jpa-2.0-api
org.springframework
spring上下文
${spring.version}
org.springframework
弹簧网
${spring.version}
org.springframework
SpringWebMVC
${spring.version}
org.springframework
德克萨斯州春季
${spring.version}
org.springframework
春季甲虫
${spring.version}
com.fasterxml.jackson.core
杰克逊核心
${jackson.version}
com.fasterxml.jackson.core
杰克逊数据绑定
${jackson.version}
com.fasterxml.jackson.core
杰克逊注释
${jackson.version}
org.hibernate
休眠实体管理器
${hibernate.version}
org.postgresql
postgresql
${postgre.version}
openshift
圣诞节市场
maven战争插件
2.1.1
部署
根
将此Maven依赖项添加到pom.xml中:
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.1-api</artifactId>
<version>1.0.0.Final</version>
</dependency>
org.hibernate.javax.persistence
hibernate-jpa-2.1-api
1.0.0.1决赛
这里的问题是JPA2.0是由容器在运行时提供的。在pom.xml
中排除提供的依赖项仅在编译时有效。要解决此问题,必须在容器中配置类加载
OpenShift JavaEE 6支持基于JBoss AS 7。从文件:
jboss-deployment-structure.xml是特定于jboss的部署
可用于控制细粒度中类加载的描述符
态度。它应该放在META-INF的顶层部署中
(或用于WEB部署的WEB-INF)。它可以执行以下操作:
Prevent automatic dependencies from being added
Add additional dependencies
...
因此,您需要添加一个自定义的jboss部署结构.xml
文件,以避免自动添加hibernate-jpa-2.0-api
基于:
我应该把这个xml文件放在哪里?@H.Aqjn“它应该放在顶级部署中,在META-INF(或WEB部署的WEB-INF)中”
<jboss-deployment-structure>
<deployment>
<exclusions>
<module name="javax.persistence.api" />
</exclusions>
</deployment>
</jboss-deployment-structure>