在spring 4.13上有一个应用程序 因此,尝试在websphere 8.5.5.13上部署ear文件时会出现错误消息
[12/18/18 14:56:41:946 MSK] 00000086 AnnotationCon E CWMDF0002E: 注解处理失败,出现以下错误: com.ibm.ws.metadata.annotations.AnnotationException: 注解处理失败的类: META-INF/versions/9/javax/xml/bind/ModuleUtil.class
这是什么问题? 可能是安装错误或应用程序和服务器库不兼容的错误?
应用程序有入口点
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = {"spring"})
public class WebAppInitalizer implements WebApplicationInitializer {
private static final String CONFIG_LOCATION = "spring.config";
private static final String MAPPING_URL = "/*";
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
System.out.println(">>>>>>>>>>>>>>>>>>>>>>> ONSTARTUP <<<<<<<<<<<<<<<<<<<<<<<<");
WebApplicationContext context = getContext();
servletContext.addListener(new ContextLoaderListener(context));
ServletRegistration.Dynamic dispatcher = servletContext.addServlet("DispatcherServlet", new DispatcherServlet(context));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping(MAPPING_URL);
System.out.println(">>>>>>>>>>>>>>>>>>>>>>> ONSTARTUP END <<<<<<<<<<<<<<<<<<<<<<<<");
}
private AnnotationConfigWebApplicationContext getContext() {
AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
context.setConfigLocation(CONFIG_LOCATION);
return context;
}
}
配置文件是
package spring.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan(basePackages = "spring")
public class AppConfig {
}
package spring.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {
}
测试控制器是:
package spring.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestController {
@RequestMapping(value = "/greeting")
public String healthCheck() {
return "greeting";
}
}
错误信息抱怨一个位于META-INF/versions/9目录下的类。该位置表明您有一个包含Java V9类的多版本JAR文件。 WAS不支持Java V9类,但已经添加了代码以容忍它们存在于多版本JAR文件中。
多版本JAR文件直到WAS 8.5.5和WAS 9.0发布之后才存在。为了解决在应用程序中添加多版本JAR文件时发现的问题,为WAS 8.5.5创建了五个APAR。以下是APAR的列表。请注意,3个APAR已包含在8.5.5.14中,另外2个在8.5.5.15中。您可能不需要全部,这取决于您的应用程序,而且在某些情况下还取决于应用程序类的扫描顺序。
WAS V9还有第六个APAR,只用于性能。它不适用于WAS 8.5.5。
底线是:要完全容忍多版本JAR文件,您需要升级到8.5.5.15或9.0.0.10或应用以下所有APAR。