maven打包排除部分文件

本文详细记录了解决Maven打包过程中遇到的问题及最终定位到问题的原因。包括尝试了多种方法,如修改jar包配置、使用war插件、调整资源管理策略等,但始终未能解决问题。最终发现是误将test目录加入到打包中导致的冲突。文章旨在为遇到类似问题的读者提供解决方案,并分享排查过程中的关键点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网上很多种办法都试过了,还是不靠谱。先把这些办法贴上来,万一其他读者有用呢:

jar包的(将其中的inclueds换成 executions即可

<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                   <archive>  
                        <manifestEntries>  
                            <Class-Path>.</Class-Path>  
                        </manifestEntries>  
                    </archive> 
                    <includes>
                    	<includes>**/main/bean/**/*.class</includes>
                    	<includes>**/main/aaa/**/*.class</includes>
                    </includes>
                    
                </configuration>
            </plugin>

war包的

<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-war-plugin</artifactId>
				<version>2.4</version>
				
				<configuration>
					<!-- <executions>
						<execution>src/test/java/test/*.*</execution>
					</executions>
					<warSourceExcludes>src/test/java/test/**</warSourceExcludes>  --> 
					<warName>openapi</warName>
					<outputDirectory>target</outputDirectory>
				</configuration>
			</plugin>

还有一种方式:
<resources>
            <resource>
                <directory>src/main/java</directory>
                包含
                <includes>
                    <include>**/*.*</include>
                </includes>
            </resource>
            <resource>
                <directory>src/test</directory>
                <filtering>true</filtering>
                <excludes>
                <exclude>**/*.*</exclude>
                </excludes>
            </resource>
        </resources>

这些都试过了,还是不行,最后看了看buildpath,发现也没啥异常的

又看了看部署配置,发现原来是这里的问题,把test删除,打包时候上面的那些都没用到就OK了。


把test也给放里面去了。虽然还不太清楚为啥maven打包会依赖这里,不过找到问题了也好。估计还是pom.xml文件写的有依赖,等我找到了再来补充这篇博客。也希望读者朋友能够留言回复,帮我解决问题。谢谢!



<think>首先,用户的问题是关于在使用Maven打包排除特定文件(如application.yml)的配置方法。用户引用了几个站内引用,我需要参考它们来回答问题。用户说:“参考站内引用”,并提供了[1]、[2]、[3]、[4],然后问我如何配置排除application.yml。系统级指令要求:-所有行内数学表达式使用$...$格式。但在这个上下文中,不需要数学表达式,所以我可以忽略。-独立公式使用$$...$$,但同样不适用。-LaTeX语法正确:这里是配置代码,不是LaTeX数学,所以代码块应该正确格式化。-使用中文回答:必须用中文。-生成相关问题:在回答末尾添加相关问题。-回答中引用的段落末尾自然地添加引用标识,例如[^1]。此外,系统提示说:“上述引用仅供参考,并不是用户真正的需求,请尽可能多的参考用户上一次的问题和你的回答。”但在这个对话历史中,上一次的问题是我的初始系统提示的示例,不是实际用户互动。用户现在是直接提问。回顾对话:-第一个消息是系统指令。-现在用户的消息是“参考站内引用:...”然后问问题。用户上一次问题的引用:[1]、[2]、[3]、[4]是关于Maven排除配置文件的示例。用户的问题核心:“我想在使用Maven打包时,希望排除application.yml文件,可能是为了避免敏感信息泄露或防止覆盖配置文件。请问maven打包排除特定文件application.yml配置方法”所以,我需要回答如何配置Maven排除特定文件如application.yml。参考用户提供的引用:-引用[1]:显示了如何在pom.xml中使用maven-jar-plugin的excludes来排除文件。-引用[2]:类似,也使用maven-jar-plugin的excludes。-引用[3]:讨论了bootstrap.yml和application.yml的区别,但用户指出可能与排除相关。-引用[4]:提到了excludes属性。重点是使用maven-jar-plugin在pom.xml中配置排除文件。回答结构:-使用中文。-结构清晰:逐步解决问题。-添加引用:在引用相关段落时添加[^1]等。-结尾生成相关问题。大纲回答:1.**介绍问题**:解释为什么需要排除application.yml(避免敏感信息泄露或防止覆盖)。2.**解决方案**:描述配置方法,使用maven-jar-plugin在pom.xml中添加<excludes>。-提供代码示例,参考引用[1]和[2]。-确保代码使用codeblock格式。3.**完整示例**:给出一个完整的pom.xml片段。4.**解释**:简要解释每个部分。5.**添加引用**:如果在描述中引用,如“如下示例所示[^1]”。6.**结尾**:添加相关问题。引用标识:-用户提供了[^1]到[^4],我需要自然地引用它们。例如,在提到排除配置时,添加引用标识。最后,生成相关问题。相关问题建议:-类似于快速排序示例。-例如:-1.如何测试排除文件是否被正确排除?-2.Maven打包中其他插件如何排除文件?-3.如何在SpringBoot应用中外部化配置文件?使用codeblock格式化代码。现在,构建回答。开始:-引言:基于用户的问题。-解决方案步骤。</think> ### Maven打包排除特定文件(如application.yml)的配置方法 在Maven项目中,有时需要排除特定配置文件(如application.yml)以避免敏感信息泄露或防止部署时覆盖外部配置文件[^1][^2]。这种需求通常源于生产环境中需要将配置外部化,便于灵活管理敏感数据或不同环境配置。以下是完整的配置方法和解释。 #### 配置步骤:使用maven-jar-plugin Maven通过`maven-jar-plugin`插件提供文件排除功能,可以在`pom.xml`文件中的`<build>`部分添加相关配置。参考用户提供的引用[^1][^2],具体步骤如下: 1. **添加插件依赖**: 在`pom.xml`中导入`maven-jar-plugin`插件。推荐使用最新版本(如3.1.0或更高),以确保兼容性。 2. **指定excludes**: 在插件的`<configuration>`部分使用`<excludes>`元素,列出要排除文件模式。文件路径使用Ant风格模式匹配,例如`**/application.yml`表示排除所有目录下的application.yml文件[^1][^2]。 3. **放入构建阶段**: 插件默认与Maven的`package`目标绑定,因此在pom.xml中配置后,执行`mvn package`命令时会自动应用排除规则。 以下是一个完整的pom.xml配置示例,基于引用[^1]和[^2]优化: ```xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>my-app</artifactId> <version>1.0.0</version> <build> <plugins> <!-- 使用maven-jar-plugin排除特定配置文件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.1.0</version> <!-- 推荐最新版本,兼容性好 --> <configuration> <excludes> <!-- 排除所有application.yml文件 --> <exclude>**/application.yml</exclude> <!-- 排除其他文件,如logback.xml或自定义文件 --> <exclude>**/application-gateway.yml</exclude> <exclude>**/logback-spring.xml</exclude> <exclude>**/tag.properties</exclude> </excludes> </configuration> </plugin> </plugins> </build> </project> ``` #### 配置解释与注意事项 - **为什么有效?**: `maven-jar-plugin`负责生成JAR文件,`<excludes>`会过滤掉指定文件,使其不出现在最终JAR中。这样,运行时可以依赖外部配置文件(如通过`-Dspring.config.location`参数指定),避免敏感数据(如数据库密码)被打包[^2][^4]。 - **路径匹配规则**: - `**/`前缀表示递归匹配任意子目录(例如`**/application.yml`覆盖所有位置)。 - 如果文件在特定目录(如resources文件夹),直接指定文件名(例如`<exclude>application.yml</exclude>`)。 - **外部化配置文件的好处**: 排除application.yml后,部署时可以使用外部文件,例如在服务器上放置application.yml,便于多环境部署(dev、test、prod)[^3]。结合Spring Boot的bootstrap.yml可以处理加载顺序:bootstrap.yml先加载配置服务器信息,application.yml处理应用级配置[^3]。 - **测试排除效果**: 执行`mvn clean package`后,检查生成的JAR文件(如用`jar tvf target/my-app.jar`命令),确认目标文件不存在。 - **常见错误**: - 确保插件版本兼容(版本低于3.0可能需不同配置)。 - 如果不生效,检查Maven构建日志或添加`<verbose>true</verbose>`到插件配置。 通过这种方式,您可以安全地管理配置,降低风险。如果您需要针对Spring Boot应用优化,参考引用[^3],可以添加`spring-cloud-starter-bootstrap`以更好地处理bootstrap.yml和application.yml的加载顺序[^3]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值