Java JRebel无法检测多个webapp文件夹上的web资源更改

Java JRebel无法检测多个webapp文件夹上的web资源更改,java,jrebel,Java,Jrebel,我有一个模块化的web项目,因此我允许模块成为一个war档案,包括webapp文件夹。使用以下rebel.xml可以很好地检测所有模块上的类更改。但由于某些原因,当html或js发生更改时,jrebel不会移动 <?xml version="1.0" encoding="UTF-8"?> <application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.zeroturnaro

我有一个模块化的web项目,因此我允许模块成为一个war档案,包括webapp文件夹。使用以下rebel.xml可以很好地检测所有模块上的类更改。但由于某些原因,当html或js发生更改时,jrebel不会移动

<?xml version="1.0" encoding="UTF-8"?>
<application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.zeroturnaround.com"
             xsi:schemaLocation="http://www.zeroturnaround.com http://www.zeroturnaround.com/alderaan/rebel-2_0.xsd">

    <classpath>
        <!-- appserver -->
        <dir name="/home/xx/data/appserver/target/classes/main"/>
        <dir name="/home/xx/data/appserver/target/resources/main"/>

        <!-- module -->
        <dir name="/home/xx/data/as.module.core/target/classes/main"/>
        <dir name="/home/xx/data/as.module.core/target/resources/main"/>

        <dir name="/home/xx/data/as.module.mqlcore/target/classes/main"/>
        <dir name="/home/xx/data/as.module.mqlcore/target/resources/main"/>
    </classpath>

    <!-- web>
        <link target="/">
            <dir name="/home/xx/data/appserver/src/main/webapp"/>
            <dir name="/home/xx/data/as.module.core/src/main/webapp"/>
            <dir name="/home/xx/data/as.module.mqlcore/src/main/webapp"/>
        </link>
    </web -->

    <web>
        <link target="/">
            <dirset dir="/home/xx/data">
                <include name="**/src/main/webapp"/>
            </dirset>
        </link>
    </web>
</application>

编辑:


有趣的事实是。当我使用web配置的注释部分时,所有三个webapp文件夹都在日志中,并将监视更改。但应用程序服务器无法找到所有webapp文件。当我使用第二个
配置时,应用服务器会看到所有文件,但jrebel不会看到这些文件。我认为不可能有多个目录链接到“/”

每个模块,例如.war或.jar文件都需要有自己的rebel.xml文件。否则,它们都将重新加载相同的资源,当使用不同的类加载器时,可能会发生各种奇怪的事情

通过从JRebel.log中搜索“find resource”,可以检查文件JRebel实际使用的实例。应该这样写 sun.misc.Launcher$AppClassLoader@184be29从“文件:/C:/Projects/testproject/Trunk/edm/target/cfg/log4j.xml”中找到资源:“cfg/log4j.xml”

还可以看到,通过使用如下事件将行挂起,哪些文件发生了更改: [IntelliJFSNotify]事件“更改”发生在:“C:/Projects/testproject/Trunk/edm/target/cfg/log4j.xml”


如果不重新加载文件,通常发现的资源路径和更改的文件路径不匹配。如果它们确实匹配,则建议将文件的绝对路径和jrebel.log发送到support@zeroturnaround.com用于调查。

好的,答案是:实际上,在
配置下不可能配置多个目录。我现在有了一个文件夹./target/all webapp,在那里我通过gradle任务将所有文件smylink(
cp-sR
)。。。不是很好,但是很有效。。。感谢上帝,jrebel正在跟踪符号链接

实际上,在webapp的类路径中有一个joint rebel.xml是一种有效的方案。由于所有模块类(不是JAR)都部署到相同的war(和分解的war文件夹结构)中,因此不需要额外的rebel.xml。这个简单的过程会互相覆盖。有趣的是,在日志中,我可以找到JRebel:重新加载类“xxx”。但在更改html文件时什么都不做。也许我可以在启动Web服务器时调整JRebel的日志级别:
JRebel:Directory'../resources/main'将被监视更改。但列出的目录是所有类和资源,而不是在rebel中指定的“webaps”。xml@Margus,我为我的所有模块生成了一个web.xml,它们存在于jar文件中,但jrebel在web war中只加载了一个模块。我不知道为什么。这是伟大的解决办法是工作。但是,JRebel支持一个模块具有多个源目录的场景。如果您尝试将文件及其绝对路径更改为JRebel支持,则可以调查它在您的案例中不起作用的原因。