当我尝试将 Spring Boot 2 应用程序部署到 Wildfly 13 时,我遇到了同样的错误。这是我在寻找答案时出现的唯一 Stack Overflow 问题,所以我想我应该将我的发现留在这里,以防其他人使用有同样的问题,因为我的解决方案与现在这里唯一的其他答案非常不同。
我的应用程序使用嵌入式 Tomcat 服务器运行得很好,但部署到 Wildfly 会失败,并出现此问题中询问的相同 AopConfigException 。我还注意到异常的根本原因是 Spring 正在寻找无参数构造函数,当我在所有自动装配的 Spring 组件中添加无参数构造函数时,该服务实际上部署到 Wildfly 并运行没有任何问题。但这似乎是一种奇怪的解决方法,感觉不对,所以我寻找更好的解决方案。
我从中学到了这个 github 问题这个异常发生在 Wildfly 中,因为 Jboss 模块没有公开 Objenesis 进行构造函数注入所需的一些依赖项。他们给出的建议解决方案是通过简单地更新项目构建来添加依赖项,如下所示:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<archive>
<manifestEntries>
<Dependencies>jdk.unsupported</Dependencies>
</manifestEntries>
</archive>
</configuration>
</plugin>
如果这对你有用,那么恭喜你。我拼凑出来自这个 JBoss 问题上述解决方案只是在 MANIFEST.MF 文件中添加“jdk.unsupported”作为“依赖项”的一种方法。对我来说不幸的是,这是 Maven pom 的一部分,而我的团队使用 Gradle 进行构建管理,所以我必须找到另一个解决方案。
适用于 Gradle 或 Maven 的解决方案
尽管可能有 Gradle 特定的方法来完成上述任务,但我发现这个 JBoss 开发指南您可以使用包含以下内容的 jboss-deployment-struct.xml 将依赖项添加到 MANIFEST.MF 中:
<jboss-deployment-structure>
<deployment>
<dependencies>
<module name="jdk.unsupported"/>
</dependencies>
</deployment>
</jboss-deployment-structure>
即使您确实使用 Maven,这似乎也是首选解决方案,因为如果您以后切换到 Gradle,它的工作原理是一样的。当然,此解决方案仅在问题仅限于 JBoss/Wildfly 时才有效。
*注意(以防 JBoss 指南的链接失效):jboss-deployment-struction.xml 文件分别位于 war/jar 应用程序的 WEB-INF 或 META-INF 目录中。
另外值得注意的是,我在 Java 11 和 Wildfly 13 上看到了这个问题,但我非常怀疑 Java 9 和 10 以及其他版本的 JBoss/Wildfly 上也存在同样的问题。