gpt4 book ai didi

unit-testing - 如何在 Maven 中使用不同的 JAR 进行编译和测试?

转载 作者:行者123 更新时间:2023-12-04 06:12:34 24 4
gpt4 key购买 nike

我针对 javaee-api 编译我的程序。但是对于 Junit 测试,我必须使用像 glassfish 的 javaee.jar 这样的特定实现来避免 java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/persistence/Persistence 之类的错误(另见 1 )。

所以避免使用仅在 glassfish 实现中可用的方法,我想用通用 api 编译我的工件,但用实现 jar 运行 junit。但是两者都提供了相同的命名类和接口(interface),所以类加载器遇到了麻烦。

解决此问题的最佳方法是什么?我可以用maven解决这个问题吗?

非常感谢

最佳答案

我认为这是可能的。实际上,从 2.0.9 版本开始,Maven 使用 POM 顺序构建类路径,因此您现在可以操作它。如果你把它和 Dependency Scope 结合起来,应该可以实现你想要的。实际上,如果您将 GlassFish 的 javaee依赖(带有测试范围)之前 javaee-api依赖项,前者应放在测试类路径中的后者之前,因此由单元测试使用,而后者将在编译期间使用。从理论上讲,这应该可行,但它有点脆弱,因此需要仔细记录。

类似的东西(使用虚构的 GFv3 jar):

<dependencies>
<dependency><!-- this one will be first on the test classpath -->
<groupId>org.glassfish</groupId>
<artifactId>javaee</artifactId>
<version>6.0</version>
<scope>test</scope>
<dependency>
<dependency><!-- this one will be used during compile -->
<groupId>javax.javaee-api</groupId>
<artifactId>javaee-api</artifactId>
<version>6.0</version>
<scope>provided</scope>
<dependency>
...
</dependencies>

关于unit-testing - 如何在 Maven 中使用不同的 JAR 进行编译和测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2116220/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com