我正在使用Spring Boot 1.5.3.RELEASE和Jolokia 1.3.6(在更高版本中也是如此)。

通过添加依赖项来集成Jolokia:

 <dependency>
     <groupId>org.jolokia</groupId>
     <artifactId>jolokia-core</artifactId>
 </dependency>

我们所有共享相同架构的微服务都无法启动,并且在启动过程中我看到了以下根本原因导致的异常:
Caused by: java.io.FileNotFoundException: JAR entry BOOT-INF/lib/jolokia-core-1.3.7.jar!/META-INF/simplifiers-default not found in <MY_JAR_NAME_GOES_HERE>.jar
    at sun.net.www.protocol.jar.JarURLConnection.connect(JarURLConnection.java:142)
    at sun.net.www.protocol.jar.JarURLConnection.getInputStream (JarURLConnection.java:150)
    at java.net.URL.openStream(URL.java:1045)
    at org.jolokia.util.ServiceObjectFactory.readServiceDefinitionFromUrl(ServiceObjectFactory.java:90)

当我从IDE启动应用程序时,仅当我以java -jar <MY_JAR>开头时,不会发生此异常。

我查看了在Jolokia代码内部产生异常的行,看起来像这样:
reader = new LineNumberReader(new InputStreamReader(new URL(pUrl).openStream(),"UTF8"));

因此,我得出结论(调试后),即new URL(pUrl).openStream()无法找到上述异常堆栈跟踪中指定的jar条目。我也了解在IDE中不会发生这种情况,因为它可与其他类加载器一起使用(Spring Boot应用程序使用LaunchedURLClassLoader)。

但是,我没有在源代码中看到错误:我们有很多微服务,所有的微服务都以相同的配置运行,并且按预期运行,此外,据我所知,这是Jolokia的记录方法积分。

因此,我怀疑这里的比赛情况或某些情况,但是我无法真正指出这里发生的情况。

有人遇到过这样的问题吗?有解决方法吗?

最佳答案

我得到了完全一样的例外。在我的情况下,问题在于文件名具有+(我正在使用reckon Gradle插件生成项目版本)。解决方案是在使用java -jar运行文件之前重命名该文件。

10-06 05:47