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

Maven资源复制失败:There are no more files错误求助

解决Maven资源复制失败(There are no more files)问题

问题现象

执行mvn clean build时触发错误,后续运行mvn resources:resources也会报同样的错。近期未修改代码,仅将杀毒软件从Avast更换为Windows Defender。项目resources目录下有3036个.txt和.properties格式文件,每次报错的目标文件不固定,即使删除大部分资源文件仅保留1003个,构建仍失败。

错误日志

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:2.7:resources (default-cli) on project utk: There are no more files -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:2.7:resources (default-cli) on project utk: There are no more files
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:216)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:120)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:347)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:154)
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:582)
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:214)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:158)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: org.apache.maven.plugin.MojoExecutionException: There are no more files
    at org.apache.maven.plugin.resources.ResourcesMojo.execute(ResourcesMojo.java:306)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:132)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
    ... 19 more
Caused by: org.apache.maven.shared.filtering.MavenFilteringException: There are no more files
    at org.apache.maven.shared.filtering.DefaultMavenFileFilter.copyFile(DefaultMavenFileFilter.java:129)
    at org.apache.maven.shared.filtering.DefaultMavenResourcesFiltering.filterResources(DefaultMavenResourcesFiltering.java:264)
    at org.apache.maven.plugin.resources.ResourcesMojo.execute(ResourcesMojo.java:300)
    ... 21 more
Caused by: java.io.IOException: There are no more files
    at java.io.WinNTFileSystem.canonicalize0(Native Method)
    at java.io.WinNTFileSystem.canonicalize(WinNTFileSystem.java:428)
    at java.io.File.getCanonicalPath(File.java:618)
    at org.apache.maven.shared.utils.io.FileUtils.copyFile(FileUtils.java:821)
    at org.apache.maven.shared.utils.io.FileUtils.copyFile(FileUtils.java:1868)
    at org.apache.maven.shared.filtering.DefaultMavenFileFilter.copyFile(DefaultMavenFileFilter.java:122)
    ... 23 more
[ERROR] 
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionExceptione here

环境信息

  • Java版本:1.8
  • Maven版本:3.2.3
  • 资源文件数量:原3036个,缩减至1003个仍失败

已尝试无效方案

  • 更新Maven及本地仓库
  • 重启电脑、重新拉取代码
  • 添加防火墙例外

pom.xml构建配置段

<build>
<resources>
    <resource>
        <directory>src/main/resources</directory>
    </resource>
    <resource>
        <directory>src/main/java</directory>
        <includes>
            <include>com/AAA/microwave/XXX/about.properties</include>
        </includes>
    </resource>
</resources>
<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <configuration>
            <archive>
                <manifest>
                    <addClasspath>true</addClasspath>
                    <mainClass>com.AAA.microwave.XXX.XXXMain</mainClass>
                </manifest>
            </archive>
        </configuration>
        <executions>
            <execution>
                <id>test-jar</id>
                <goals>
                    <goal>test-jar</goal>
                </goals>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <mainClass>com.AAA.microwave.XXX.XXXTestMain</mainClass>
                        </manifest>
                        <manifestEntries>
                            <Class-Path>${project.artifactId}-${project.version}-tests.jar ${project.artifactId}-${project.version}.jar MMM-XXX-${project.version}.jar MMM-ubt-${MMMVersion}.jar</Class-Path>
                        </manifestEntries>
                    </archive>
                </configuration>
            </execution>
        </executions>
    </plugin>
    <plugin>
        <artifactId>maven-dependency-plugin</artifactId>
        <executions>
            <execution>
                <id>copy</id>
                <phase>process-resources</phase>
                <goals>
                    <goal>copy</goal>
                </goals>
                <configuration>
                    <outputDirectory>${basedir}</outputDirectory>
                    <stripVersion>true</stripVersion>
                    <artifactItems>
                        <artifactItem>
                            <groupId>org.rxtx</groupId>
                            <artifactId>rxtxparallel</artifactId>
                            <version>1.0</version>
                            <type>dll</type>
                        </artifactItem>
                        <artifactItem>
                            <groupId>org.rxtx</groupId>
                            <artifactId>rxtxserial</artifactId>
                            <version>1.0</version>
                            <type>dll</type>
                        </artifactItem>
                    </artifactItems>
                </configuration>
            </execution>
        </executions>
    </plugin>
    <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <configuration>
            <outputDirectory>${delivery.directory}</outputDirectory>
            <appendAssemblyId>false</appendAssemblyId>
        </configuration>
        <executions>
            <execution>
                <id>XXXAppli</id>
                <phase>package</phase>
                <goals>
                    <goal>single</goal>
                </goals>
                <configuration>
                    <finalName>XXXAppli</finalName>
                    <descriptor>src/main/assembly/XXX_exe_zip.xml</descriptor>
                </configuration>
            </execution>
        </executions>
    </plugin>
</plugins>

解决方案

从错误栈看,根源是Windows系统下File.getCanonicalPath()调用原生方法时抛出的文件访问异常,结合杀毒软件更换的背景,按以下步骤排查解决:

1. 排查Windows Defender拦截

  • 临时关闭Windows Defender实时保护,重新执行构建,确认是否是杀毒软件在扫描过程中锁定了资源文件
  • 如果关闭后构建正常,将项目根目录添加到Windows Defender的排除项:
    打开Windows安全中心 → 病毒和威胁防护 → 管理设置 → 添加或删除排除项 → 选择项目所在文件夹

2. 升级Maven资源插件

当前使用的maven-resources-plugin 2.7版本较旧,存在文件处理相关bug,升级到最新稳定版(如3.3.1):
在pom.xml的<plugins>节点中添加:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <version>3.3.1</version>
</plugin>

3. 优化资源处理配置

  • 检查资源目录中是否存在路径过长(超过Windows默认260字符)或带特殊字符的文件,如有则重命名或调整目录结构缩短路径
  • 如果不需要对资源文件做变量替换,禁用资源过滤:
    修改pom.xml中的<resource>配置,添加<filtering>false</filtering>:
<resource>
    <directory>src/main/resources</directory>
    <filtering>false</filtering>
</resource>
<resource>
    <directory>src/main/java</directory>
    <includes>
        <include>com/AAA/microwave/XXX/about.properties</include>
    </includes>
    <filtering>false</filtering>
</resource>

4. 调整Maven JVM参数

在系统环境变量中添加MAVEN_OPTS,设置:

-Dsun.io.useCanonCaches=false

该参数会禁用文件路径缓存,避免因缓存导致的文件访问冲突

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 02:48:09