如何让Maven将临时文件排除在打包生成的JAR之外?
如何排除Maven打包中的隐藏交换文件(如.swp)
当你运行mvn package时,如果src/main/resources/log4j2.xml这类文件在gvim里处于打开状态,Maven会把生成的.log4j2.xml.swp交换文件复制到target/classes/目录,最后打包进目标JAR里。现在需要排除所有匹配.??*通配符模式的文件(这类是以.开头、后面至少有两个字符的隐藏文件,正好覆盖vim交换文件的格式)。
当前你的pom.xml中<build>下仅包含以下插件配置:
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>appassembler-maven-plugin</artifactId> <version>2.1.0</version> <executions> <execution> <id>classpath-generation</id> <phase>compile</phase> <goals> <goal>assemble</goal> </goals> <configuration> <platforms> <platform>unix</platform> </platforms> <unixScriptTemplate>src/templates/tools_env.sh</unixScriptTemplate> <assembleDirectory>${project.build.directory}/classes</assembleDirectory> <binFolder>.</binFolder> <generateRepository>false</generateRepository> <programs> <program> <id>tools_env.sh</id> <mainClass>-</mainClass> </program> </programs> </configuration> </execution> </executions> </plugin>
解决方案
要解决这个问题,你需要配置Maven的资源处理规则,阻止它复制这类隐藏文件,有两种简单的方式:
方式一:全局资源排除(推荐)
直接在<build>标签下添加<resources>节点,指定资源目录并排除匹配.??*的文件,这种规则会全局生效:
<build> <!-- 保留你原有的appassembler插件配置 --> <plugin> <!-- 原插件代码 --> </plugin> <!-- 添加资源排除规则 --> <resources> <resource> <directory>src/main/resources</directory> <excludes> <exclude>.??*</exclude> </excludes> <includes> <include>**/*</include> </includes> </resource> </resources> </build>
这个配置会让Maven处理src/main/resources下的资源时,跳过所有符合.??*模式的文件,同时保留其他所有文件的正常复制。
方式二:显式配置资源插件
如果你需要更精细的控制,可以显式配置maven-resources-plugin,在它的配置中添加排除规则:
<build> <!-- 保留你原有的appassembler插件配置 --> <plugin> <!-- 原插件代码 --> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>3.3.1</version> <!-- 使用最新稳定版本即可 --> <configuration> <excludes> <exclude>.??*</exclude> </excludes> </configuration> </plugin> </build>
两种方式都能有效阻止vim交换文件这类隐藏文件被复制到target/classes目录,自然也就不会被打包进最终的JAR文件里了。
内容的提问来源于stack exchange,提问作者Mikhail T.
相关产品推荐
相关产品推荐

