Maven:hibernate entitymanager与javaee api一起打破了我的单元测试
我的pom中有两个依赖项Maven:hibernate entitymanager与javaee api一起打破了我的单元测试,java,jakarta-ee,build,maven,Java,Jakarta Ee,Build,Maven,我的pom中有两个依赖项javaee api和hibernate entitymanager。但它们不能很好地协同工作:只要我添加JavaEEAPI,我的所有单元测试都会中断,因为java.lang.ClassFormatError:在类文件javax/validation/validation中,方法中缺少非本机或抽象的代码属性。没有JavaEEAPI,一切都可以正常工作。为什么呢 (为了适应这个问题,对这个问题进行了编辑;)Maven依赖项没有顺序,但提供了 因此,您需要做的是,使用作用域为
javaee api
和hibernate entitymanager
。但它们不能很好地协同工作:只要我添加JavaEEAPI,我的所有单元测试都会中断,因为java.lang.ClassFormatError:在类文件javax/validation/validation
中,方法中缺少非本机或抽象的代码属性。没有JavaEEAPI,一切都可以正常工作。为什么呢
(为了适应这个问题,对这个问题进行了编辑;)Maven依赖项没有顺序,但提供了
因此,您需要做的是,使用作用域为以下对象构建正确的依赖项集:
- 编译时
- 服务器中的运行时:(例如,
用于compiletime需要但将由服务器提供的依赖项,因此您的应用程序不包含它们provided
- 测试时间:使用
范围添加仅用于测试的依赖项(例如junit)test
javaee api
中。如果是这种情况,请添加:
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.0.0.GA</version>
<scope>test</scope>
</dependency>
javax.validation
)
首先,据我所知,在Maven2中,依赖项的顺序没有保留,并且在执行代码时,这些依赖项在最终类路径中的出现顺序也没有保证。在您的情况下,我将“排除”依赖关系结构中的重叠库
寻找Maven排除文档
考虑到库版本匹配的复杂性,我建议您从一个HibernateMaven开始,并将其变形到您的项目中
我希望这会有所帮助。这是由java-ee-api.jar包含的内容造成的。有很多方法可以解决这个问题。更改pom.xml中的顺序也帮了我的忙。您使用的是什么应用服务器,Jboss,Glassfish?单元测试时不涉及应用服务器,但该应用程序稍后将在Jboss 6中运行。我确定Jboss提供了什么,没有提供什么。而且范围是正确的。但是当JavaEEAPI在类路径中时,HibernateEntityManager可能会在运行时加载一些验证内容;这可以解释这种奇怪的行为。提前谢谢,我明天会检查的。我添加了依赖验证api,关闭了bean验证,现在一切正常-你是对的!我在依赖项的底部列表中添加了依赖项,但不起作用。但向高层迈进是可行的。非常奇怪。依赖顺序确实很重要。