HotSwapAgent无法将filePath转换为classPathPath

时间:2018-07-19 12:58:30

标签: java spring hotswapagent

我正在尝试在我们的项目中使用HotSwapAgent。 我们使用的是Wildfly 10.x,我们的项目部署为爆炸的EAR,其中发生了爆炸战争。 我添加了以下JVM选项:

-XXaltjvm=dcevm -javaagent:c:\dev\hotswap-agent.jar

在部署WildFly时,出现以下错误:

HOTSWAP AGENT: 14:42:40.479 ERROR (org.hotswap.agent.plugin.spring.scanner.XmlBeanDefinationScannerAgent) - failed to convert filePath /C:/dev/projects/project_abc/abc/ABC/target/ABC_Exploded.ear/ABCWeb.war/WEB-INF/config/spring/soap-context.xml to classPath path

当我让Wildfly运行时,稍后会显示以下错误,并且部署失败。

rror creating bean with name 'systemConfigurationService' defined in ServletContext resource [/WEB-INF/config/spring/service-maintenance-context.xml]: Invocation of init method failed; nested exception is java.lang.reflect.UndeclaredThrowableException

有人知道如何配置此权限吗? 我读过您可以将ExtraClassPath放入HotswapAgent的属性中,但是我不知道应该设置什么。

1 个答案:

答案 0 :(得分:1)

您必须根据需要更改 org.hotswap.agent.plugin.spring.scanner.XmlBeanDefinationScannerAgent 中的 convertToClasspathURL

在您的情况下,该方法似乎只是以下内容:

paths = filePath.split("WEB-INF/config/spring");
        if (paths.length == 2) {
            return paths[1];
        }

convertToClasspathURL (根据您的类路径需求对其进行修改后):

private static String convertToClasspathURL(String filePath) {
        String[] paths = filePath.split("src/main/resources/");
        if (paths.length == 2) {
            return paths[1];
        }

        paths = filePath.split("WEB-INF/classes/");
        if (paths.length == 2) {
            return paths[1];
        }

        paths = filePath.split("target/classes/");
        if (paths.length == 2) {
            return paths[1];
        }

        paths = filePath.split("target/test-classes/");
        if (paths.length == 2) {
            return paths[1];
        }

paths = filePath.split("WEB-INF/config/spring");
            if (paths.length == 2) {
                return paths[1];
            }

        LOGGER.error("failed to convert filePath {} to classPath path", filePath);
        return filePath;
    }

希望它可以解决您的问题!