我有一个 Spring Boot 应用程序,可以通过 Spring Boot Gradle Plugin 或java -jar myApp.war
命令运行。
但是,如果我尝试在 WebSphere Liberty 应用程序服务器上部署它,则会收到以下错误:
[WARNING ] CWWKC0044W: An exception occurred while scanning class and annotation data. The exception was java.lang.RuntimeException
at org.objectweb.asm.ClassVisitor.visitModule(ClassVisitor.java:148)
at [internal classes]
.
此外,此错误导致 Spring Boot 开始使用DEBUG
严重性进行记录,即使它已使用INFO
或{{WARN
配置1}} 德尔>
有人可以指导我找到根本原因,或者如何深入调查?
我使用以下版本:
以及以下依赖项:
dependencies {
implementation "org.springframework.boot:spring-boot-starter-web:2.0.0.M7"
implementation "org.springframework.boot:spring-boot-starter-thymeleaf:2.0.0.M7"
providedRuntime "org.springframework.boot:spring-boot-starter-tomcat:2.0.0.M7"
}
我尝试了不同版本的 Spring Boot (1.5.9)和 WLP (17.0.0.3),但错误没有改变。 德尔>
更新: Spring Boot 1.5.9中不存在该错误。
答案 0 :(得分:0)
您需要包含Liberty spring启动程序,并排除Tomcat启动程序(因为您使用的是Liberty而不是Tomcat)。
您的依赖项应如下所示:
dependencies {
...
// Include liberty and exclude tomcat
compile('io.openliberty.boot:liberty-spring-boot-starter:0.5.0.M1')
compile('org.springframework.boot:spring-boot-starter-web') {
exclude module: "spring-boot-starter-tomcat"
}
...
}
有关使用Liberty + Spring的基本HelloServlet的更详细演练,请查看Tom Watson的博客文章:Open Liberty Spring Boot Starter
答案 1 :(得分:0)
我能够通过排除 Log4j 传递依赖性来消除错误。必须从每个spring-boot-starter-*
依赖项中删除它(在我的情况下为web
和thymeleaf
)。因此,我在全球范围内将其排除在外:
configurations {
implementation {
exclude group: 'org.apache.logging.log4j'
}
}
我使用 Gradle 4,因此配置为implementation
。对于旧版本,它应为compile
。
但是,我仍然不知道根本原因是什么,所以一些解释会很好。我怀疑一些旧的/不兼容的Java版本。