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

Java9迁移遇groovy-maven-plugin报错:java.io.File无canonicalFile属性

解决Java9迁移中groovy-maven-plugin的canonicalFile属性错误

问题分析

你碰到的这个错误核心原因是旧版本的Groovy(2.4.13)和groovy-maven-plugin(2.0)不兼容Java9。Java9引入了模块系统(JPMS),同时对java.io.File的内部访问逻辑做了调整,而Groovy 2.4.x系列完全没针对Java9做适配,导致插件运行时找不到canonicalFile这个属性。

另外需要注意,这个老旧的Groovy依赖是从nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect:1.4.0间接带进来的,该版本的布局方言依赖的Groovy版本太老,压根不支持Java9及以上环境。


解决方案

方案1:升级thymeleaf-layout-dialect到兼容Java9的版本

最省心的方式是直接把thymeleaf-layout-dialect升级到依赖新Groovy版本的版本,比如2.4.1(这个版本依赖Groovy 2.5.x,完美支持Java9+)。在你的pom.xml里更新依赖:

<dependency>
    <groupId>nz.net.ultraq.thymeleaf</groupId>
    <artifactId>thymeleaf-layout-dialect</artifactId>
    <version>2.4.1</version>
</dependency>

升级后它会自动引入兼容Java9的Groovy版本,同时也能避免插件和依赖的Groovy版本冲突。

方案2:排除旧Groovy依赖并手动引入兼容版本

如果暂时没法升级thymeleaf-layout-dialect,可以在依赖里先排除旧的Groovy,再手动添加支持Java9的Groovy版本(推荐2.5.x系列,比如2.5.18):

<dependency>
    <groupId>nz.net.ultraq.thymeleaf</groupId>
    <artifactId>thymeleaf-layout-dialect</artifactId>
    <version>1.4.0</version>
    <exclusions>
        <exclusion>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<!-- 手动引入兼容Java9的Groovy版本 -->
<dependency>
    <groupId>org.codehaus.groovy</groupId>
    <artifactId>groovy</artifactId>
    <version>2.5.18</version>
</dependency>

方案3:升级groovy-maven-plugin版本

如果上面两个方案试了还是有问题,就得确保groovy-maven-plugin用的是支持Java9的版本。因为你项目pom里没声明这个插件,大概率是父pom或者其他依赖带进来的,你可以在pom的build/plugins块里显式声明更新后的插件版本:

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.gmaven</groupId>
            <artifactId>groovy-maven-plugin</artifactId>
            <version>2.1.1</version> <!-- 该版本支持Java9 -->
            <executions>
                <execution>
                    <id>generate-deploy-files</id>
                    <goals>
                        <goal>execute</goal>
                    </goals>
                    <!-- 保留原有的执行配置 -->
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

验证

修改完成后,执行以下命令清理并重新构建项目:

mvn clean install

应该就能解决No such property: canonicalFile for class: java.io.File的错误了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:46:51