为了学习Spring,我创建了一个非常小的项目,并使用Gradle成功地构建了这个项目。然后,我能够使用.war成功地运行java -jar UserSettingController.war,获得了Spring消息:
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.1.0.BUILD-SNAPSHOT)接下来,我想把这个从Tomcat移到Websphere from。因此,我天真地将.war文件从我的项目/build/libs/复制到适当的dropins文件夹,然后启动自由服务器。在这一点上,我在自由console.log中看到的不是Spring徽标,而是以下内容:
[WARNING ] CWWKC0044W: An exception occurred while scanning class and annotation data. The exception was java.lang.IllegalArgumentException
at org.objectweb.asm.ClassReader.<init>(Unknown Source)
at [internal classes]
.
[WARNING ] CWWKC0044W: An exception occurred while scanning class and annotation data. The exception was java.lang.IllegalArgumentException
at org.objectweb.asm.ClassReader.<init>(Unknown Source)
at [internal classes]
.
[WARNING ] CWWKC0044W: An exception occurred while scanning class and annotation data. The exception was java.lang.IllegalArgumentException
at org.objectweb.asm.ClassReader.<init>(Unknown Source)
at [internal classes]
.
[AUDIT ] CWWKT0016I: Web application available (default_host): http://ui15-lin.utopusinsights.com:9080/UserSettingController/
[AUDIT ] CWWKZ0001I: Application UserSettingController started in 4.829 seconds.
[AUDIT ] CWWKF0012I: The server installed the following features: [jsp-2.2, servlet-3.1, ssl-1.0, jndi-1.0, websocket-1.0, json-1.0, localConnector-1.0, adminCenter-1.0, distributedMap-1.0, jaxrs-1.1, restConnector-1.0].
[AUDIT ] CWWKF0011I: The server defaultServer is ready to run a smarter planet.我的问题是:那些[Warning]重要吗?如果是的话,问题是什么?或者应用程序实际上是通过Web服务器侦听,如果是的话,它在监听哪个端口(8080?)?
发布于 2018-04-25 20:29:22
很可能,应用程序包含了一个具有java9特性的jar文件。
最简单的是,有一个已经编译到java9的普通类。
更可能的是,应用程序引入了一个实用程序jar,例如log4j,它有一个“模块-信息”类,或者包含一个多版本目录(目前,只有“META/version/9”是可能的)。
(有关多版本jars的更多信息,请参见https://www.javaworld.com/article/3184029/java-language/java-9s-other-new-enhancements-part-4-multi-release-jar-files.html。)
一个“模块-信息”类文件将始终被编译到java9或更高版本。多版本目录中的类将被编译到作为目录名提供的java版本中。
在所有情况下,如果类使用ASM达到注释处理,就会出现IllegalArgumentException。(尝试加载类也会导致异常。)
出现这个问题的部分原因是,当前的WebSphere自由注释处理使用一个简单的测试来发现“类类型”资源,测试是测试类资源名称(文件或jar条目)是否以".class“结尾。在引入模块-info类型类之前,以及在元-INF文件夹下放置类之前,这个测试已经足够了。
作为更新,代码更改将阻止问题类(类“模块-信息”或“META”下的任何类)被处理。有关更多信息,请参见开放自由问题1635:https://github.com/OpenLiberty/open-liberty/issues/1635。
关于解决问题的项目更新:我最好的感觉是,该项目更新会影响应用程序中的jars,结果是具有java9特性的jars不再被放入。
https://stackoverflow.com/questions/50003016
复制相似问题