WLP上的Spring Boot部署(WebSphere Liberty)会引发CWWKC0044W错误

时间:2018-01-11 15:55:08

标签: spring spring-boot gradle websphere websphere-liberty

我有一个 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}}

有人可以指导我找到根本原因,或者如何深入调查?

我使用以下版本:

  • Spring Boot:2.0.0.M7
  • WLP:17.0.0.4
  • Java(build):Zulu 1.8.0_152
  • Java(WLP):IBM 8.0.5.6

以及以下依赖项:

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中不存在该错误。

2 个答案:

答案 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-*依赖项中删除它(在我的情况下为webthymeleaf)。因此,我在全球范围内将其排除在外:

configurations {
    implementation {
        exclude group: 'org.apache.logging.log4j'
    }
}

我使用 Gradle 4,因此配置为implementation。对于旧版本,它应为compile

但是,我仍然不知道根本原因是什么,所以一些解释会很好。我怀疑一些旧的/不兼容的Java版本。