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

如何让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.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 17:12:51