我正在尝试将 Microsoft Application Insights 与我的 Spring Boot 应用程序一起使用。
它使用 JAXB 使用以下代码从 ApplicationInsights.xml(存储在/java/main/resources 中)加载 xml 配置:https://github.com/Microsoft/ApplicationInsights-Java/blob/master/core/src/main/java/com/microsoft/applicationinsights/internal/config/JaxbAppInsightsConfigurationBuilder.java
通过 gradle 运行 spring boot 应用程序时效果很好(因为资源存在于普通文件系统中)。
但是,如果我为此项目创建一个 jar 文件并尝试运行它,则会看到以下错误:
javax.xml.bind.UnmarshalException
- with linked exception:
[java.io.FileNotFoundException: C:\Users\u\Code\ExperimentationService\file:\C:\Users\u\Code\ExperimentationService\build\libs\experimentationService-0.1.0.jar!\ApplicationInsights.xml (The filename, directory name or volume label syntax is incorrect)]
我在 Linux 环境中运行时也遇到了同样的问题。
我可以做些什么来使 xml 文件可供解码器使用,还是需要在 Application Insights 的 sdk 中更改此内容?
最佳答案
这看起来像是 SDK 中的一个错误。我使用调试器单步调试了 SDK 代码,它实际上在 jar 中找到了该文件,只是无法读取它(如 this question 所示,它不存在于文件系统上,而是存在于 jar 中)。
同时您可以尝试的一件事是将 XML 文件放在与 jar 相同的目录中(SDK 将检查它是否有配置文件)。我碰巧认识 AppInsights 团队 - 我会跟进他们,看看我们是否可以发布修复程序。当我了解更多信息后将编辑问题。
编辑:
我与 AppInsights Java SDK 团队进行了交谈。该错误已修复,新版本应该会在下周发布。
编辑:
这是 PR:https://github.com/Microsoft/ApplicationInsights-Java/pull/257
关于java - 从 jar 内的文件中发出解码对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31789083/