You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gradle文件系统监视器对子项目失效,求解决方案

问题描述

近期把Micronaut项目拆成独立模块后,用gradle run -t启动的持续构建不再检测子项目的代码变更,但根项目的变更能正常触发重新构建。

配置信息

根项目build.gradle

plugins {
    id 'java'
    id "com.github.johnrengelman.shadow" version "7.0.0"
    id "io.micronaut.application" version "3.6.5"
}

version = "0.1"
group = "com.example"

repositories {
    mavenCentral()
}

configurations {
    compile
}

micronaut {
    runtime("netty")
    testRuntime("junit5")
    processing {
        incremental(true)
        annotations("*")
    }
}

dependencies {
    implementation project(':child1')
    implementation project(':child2')
}

子项目build.gradle示例

plugins {
    id 'java'
    id 'io.micronaut.library'
}

group 'com.example'
version '0.1'

repositories {
    mavenCentral()
}

dependencies {
   implementation project(":child1")
}

gradle.properties

org.gradle.jvmargs='-Dfile.encoding=UTF-8'
org.gradle.caching=true
org.gradle.vfs.verbose=true
org.gradle.vfs.watch=true
micronautVersion=3.7.4
version=7.4.0

gradle run --dry-run输出

VFS> Statistics since last build:                  
VFS> > Stat: Executed stat() x 0. getUnixMode() x 0
VFS> > FileHasher: Hashed 0 files (0 bytes)        
VFS> > DirectorySnapshotter: Snapshot 0 directory hierarchies (visited 0 directories, 0 files and 0 failed files)
Received 4102 file system events since last build while watching 1 locations
Virtual file system retained information about 545 files, 113 directories and 0 missing files since last build
:child1:compileJava SKIPPED
:child2:compileJava SKIPPED
:child3:compileJava SKIPPED
:compileJava SKIPPED
:processResources SKIPPED
:classes SKIPPED
:child1:processResources SKIPPED
:child1:classes SKIPPED
:child1:jar SKIPPED
:child2:processResources SKIPPED
:child2:classes SKIPPED
:child2:jar SKIPPED
:child3:processResources SKIPPED
:child3:classes SKIPPED
:child3:jar SKIPPED
:run SKIPPED

Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.

You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.

See https://docs.gradle.org/7.4.2/userguide/command_line_interface.html#sec:command_line_warnings

BUILD SUCCESSFUL in 2s
Received 16 file system events during the current build while watching 1 locations
Virtual file system retains information about 564 files, 117 directories and 0 missing files until next build
VFS> Statistics during current build:
VFS> > Stat: Executed stat() x 4. getUnixMode() x 0
VFS> > FileHasher: Hashed 15 files (40.351 bytes)
VFS> > DirectorySnapshotter: Snapshot 4 directory hierarchies (visited 4 directories, 19 files and 0 failed files)
排查与解决思路
  • 给子项目开启增量注解处理:子项目用了micronaut.library插件但没配置增量编译,在子项目的build.gradle里加以下配置,把注解范围缩到实际包名,别用通配符*:
    micronaut {
        processing {
            incremental(true)
            annotations("com.example.yourpackage.*")
        }
    }
    
  • 检查VFS监听范围:从dry-run输出看VFS只监听了1个位置,加org.gradle.vfs.watch.debug=true到gradle.properties,看实际监听的目录是不是包含所有子项目源码文件夹,没包含的话得调整项目结构或Gradle配置。
  • 明确run任务的依赖:根项目的run任务要明确依赖子项目的classes任务,确保子项目变更能触发根项目重建,在根项目build.gradle加:
    run.dependsOn ':child1:classes', ':child2:classes', ':child3:classes'
    
  • 统一Micronaut版本:根项目插件版本3.6.5和gradle.properties里的3.7.4不一致,把根项目的io.micronaut.application插件版本改成3.7.4,避免版本冲突导致的异常。
  • 临时禁用缓存测试:先把org.gradle.caching=true改成false,看看是不是缓存导致变更没被检测到,测试后再决定要不要重新开启。

内容的提问来源于stack exchange,提问作者Zonko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 05:10:26