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
相关产品推荐
相关产品推荐

