Maven:hibernate-entitymanager与javaee-api一起破坏了我的单元测试

| 我的pom中有两个依赖项
javaee-api
hibernate-entitymanager
。但是它们不能很好地协同工作:一旦我添加了javaee-api,我的所有单元测试都因
java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/validation/Validation
而中断。没有javaee-api,一切正常。这是为什么? (此问题已被编辑以适合该问题;))     
已邀请:
Maven依赖关系没有顺序,但是提供了范围的概念。 因此,您需要做的是,使用范围为以下各项建立正确的依赖关系集: 编译时间 服务器中的运行时:(例如,对于编译时需要的依赖关系使用“ 3”,但是依赖关系将由服务器提供,因此您的应用程序不包含/不包含它们) 测试时间:使用“ 4”作用域添加仅用于测试的依赖项(例如,junit) 在您的特殊情况下,看起来javax.validation接口库在测试中不可用。愿他们不被归入
javaee-api
。如果是这种情况,请添加:
     <dependency>
        <groupId>javax.validation</groupId>
        <artifactId>validation-api</artifactId>
        <version>1.0.0.GA</version>
        <scope>test</scope>
    </dependency>
但是请注意,您对服务器中包含的内容的解释对我来说听起来很奇怪。 -我建议仔细检查服务器提供的内容以及“ 0”中继包括的内容。但是我可能是错的,ѭ8仅在显式测试中才需要 仅当包含ѭ0时才出现此问题的原因可能是,当类路径中的实现可行时,有时仅打开javax验证。 在某些情况下,依存关系的顺序很重要。 “问题”是,如果在两个地方(直接和inderect)引用了一个库/依赖关系,并且两个引用的版本都指向同一库的不同者,则Maven必须决定使用哪个版本。 第一个也是最重要的标准是依赖关系树中引用的深度。如果您直接在项目POM中引用该库,则它将主导所有其他库。如果该库是由您直接引用的库直接引用的,那么它将主导所有其他间接引用的库。 但是,如果在依赖关系树的相同深度中有两个引用(对不同版本的相同库的引用),则第一个引用将获胜。 (更多细节)。 首先,     
这是因为java-ee-api.jar包含残废类。有替代的依赖项可以解决此问题。更改pom.xml中的顺序也对我有用。     
据我所知,在Maven2中,不保留依赖关系的顺序,并且不能保证执行代码时这些依赖关系在最终类路径中的出现顺序。在您的情况下,我会“排除”重叠库中的依赖项结构。 在此处查找Maven排除文档。 考虑到库版本匹配的复杂性,我建议您从一个Hibernate Maven示例开始,然后将其转换为项目。 我希望这有帮助。     

要回复问题请先登录注册