gpt4 book ai didi

java - 使用 PowerMock 添加测试后 Spring Web 应用程序无法启动

转载 作者:行者123 更新时间:2023-12-01 23:13:00 25 4
gpt4 key购买 nike

我需要带有mockito api 的powermock 来进行一些JUnit 测试。测试运行良好,但现在我无法运行该项目。我不明白,因为所有新库都在测试范围内:

    <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>1.9.5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito</artifactId>
<version>1.5.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<version>1.5.4</version>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- THIS IS NEEDED FOR JAVA 1.7 -->
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.18.1-GA</version>
<scope>test</scope>
</dependency>

当我在 Tomcat 上部署应用程序时,出现以下异常:

Caused by: java.lang.NoClassDefFoundError: javassist/bytecode/ClassFile
at org.hibernate.ejb.packaging.AbstractJarVisitor.checkAnnotationMatching(AbstractJarVisitor.java:246)
at org.hibernate.ejb.packaging.AbstractJarVisitor.executeJavaElementFilter(AbstractJarVisitor.java:212)
at org.hibernate.ejb.packaging.AbstractJarVisitor.addElement(AbstractJarVisitor.java:173)
at org.hibernate.ejb.packaging.ExplodedJarVisitor.getClassNamesInTree(ExplodedJarVisitor.java:126)
...
Caused by: java.lang.ClassNotFoundException: javassist.bytecode.ClassFile
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1702)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:154

我不明白为什么测试范围依赖项会干扰部署。

最佳答案

你确实没有足够的关于你的 pom 的信息,但这看起来很可能:

Javassist 是 Hibernate 的传递依赖项(请参阅 here ),在添加 powermock 之前,由于此依赖项,它已包含在您的 WAR 文件中。

<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>XXXXX</version>
</dependency>

通过你的 powermock 技巧,你已经告诉 Maven javassist 不应该包含在你的 WAR 文件中,通过显式使其测试范围:

<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.18.1-GA</version>
<scope>test</scope>
</dependency>

因此,将 javassist 范围更改为 runtime,它将包含在您的 WAR 文件中,并且您的 ClassNotFoundException 应该消失。

关于java - 使用 PowerMock 添加测试后 Spring Web 应用程序无法启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21577139/

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