Maven当中resources标签的用法

本文详细介绍了Maven中resources标签的作用及用法,包括如何确保特定文件被正确编译和打包,以及如何从配置文件中引用pom.xml中的属性值。

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

在开发当中,我们一般打包都是利用maven打包的,在项目当中我们经常会看见resources标签,可能很多人对这个标签并不是很理解,本篇文章主要详细记录resources标签的用法。

可能写的比较多,但是都是我亲自做实验,边做实验边记录的。看完相信你肯定能理解的。

一、resources作用

1、打包编译作用

在项目当中进行编译的时候,他默认是不会对某些文件进行编译的,例如在java文件夹下的mybatis当中的.xml文件,还有在resources文件夹当中有时候会存储一些资源文件,默认有些也是不进行编译的,这里的不进行编译指的是他不会编译到target文件夹当中,并且打包也是。

我们在正常开发项目的时候,有时候获取资源是获取的编译后的路径地址,他会在编译后的路径找不到文件(target文件夹),就是这个原因。

这时候就需要用到resources标签,在pom.xml添加,告诉maven我这些文件也需要编译,并且打包的时候需要打包进去。

2、配置文件取pom当中的值

在现实开发当中,我也遇到过,在pom文件当中配置参数,然后通过application.properties使用@@来进行取pom的值。假如我不想用application.properties取值,而是用了新创建的比如a.properties取值,这时候就需要在pom当中配置resources。

下面经过示例直接演示。

二、演示resources打包编译的作用

1、创建springboot项目

这里我创建了个空项目,然后resources当中加了很多空文件,java当中也是加了一个文件,pom.xml我是没有动的,现在开始编译打包测试。

看看哪些文件在编译过后,会丢失。

2、进行编译打包

mvn clean install 一下:

这个是编译后的,可以看出来在java文件夹当中,我添加了a.fxml文件,但是编译过后却丢了。(注意:这里的fxml文件只是演示,总之不是java文件,也可能xml等文件

3、出现问题

这里我打的jar包,将包解压之后发现和target当中的classes一模一样。同样是缺少那个a.fxml文件。

4、得出结论

1、假如pom.xml不加resources,编译出来的会丢失文件,这也就是很多情况下,我们在本地电脑运行没有问题,但是一旦打包到服务器,会发现项目根本跑不起来,缺少各种文件,有时候就是这个原因。

2、target当中的classes和打出来的包解压后的classes是一模一样的。

5、添加resources进行解决

这里的配置代表的是,我要将src/main/java路径下.fxml文件结尾的,编译打包进去。

当有两个同类型文件,只想打包进去一个文件,可以在include标签当中指定文件名称。

<build>
	<resources>
		<resource>
			<directory>src/main/java</directory>
			<filtering>true</filtering>
	              <includes>
	                  <include>**/*.fxml</include>
	              </includes>
	          </resource>
	</resources>
</build>

添加这个配置之后,再进行编译打包,会发现以下问题:
view当中的文件打包进来了,但是resources文件下的文件夹和文件全丢了。

解决

告诉maven,resources文件下的全部要进行编译。

<build>
	<resources>
		<resource>
			<directory>src/main/java</directory>
			<filtering>true</filtering>
            <includes>
                <include>**/*.fxml</include>
            </includes>
        </resource>
		<resource>
			<directory>src/main/resources</directory>
			<filtering>true</filtering>
        </resource>
	</resources>
</build>	

从这里可以看出来,现在我项目当中的文件都打包进来了。

三、演示application取pom当中值

1、创建springboot项目

pom配置文件我添加了一个port设置。

<properties>
	<java.version>1.8</java.version>
	<port>8081</port>
</properties>

项目里面我添加了一个a.properties文件。a.properties和application.properties当中我都设置了:

server.port=@port@

目的:就是让配置文件的port去读pom.xml当中设置的port值。

2、进行编译打包

编译打包后会发现,a.properties没有变化,而application.properties却变成了maven当中设置的值。

3、得出结论

我这里用的是springboot2.6.2,不管是哪个版本都可以点进去,我们点进去观察。

从这里可以看出,springboot依赖当中,其实已经将application.properties给配置了。

也就是a.properties没有进行配置,所以取不到值,而application.properties配置了,所以取到值了。

4、添加resources进行解决

目前问题是假如我想让a.properties也一样可以取到值。

通过添加以下配置即可:

<resources>
  <resource>
	<directory>src/main/resources</directory>
	<filtering>true</filtering>
  </resource>
</resources>

注意:

这里的filtering一定要设置为true,假如为false,我们配置文件当中用到了@@取pom的值,会取不到。

实际上,他是在编译过后就把application当中的值给替换了,替换成了pom当中配置的值,而并非是程序当中获取的时候,他才动态去获取pom当中的值。

5、疑问

可能有的人会感觉好奇,为什么不这么配置,其实我也试了,只不过这么加的话,resources当中的文件就丢了,只剩下a.properties了。

<resources>
  <resource>
	<directory>src/main/resources</directory>
	<filtering>true</filtering>
	<includes>
	  <include>a.properties</include>
	</includes>
  </resource>
</resources>

总结:一旦pom当中添加resources,指定某一个文件,就会导致resources其他文件打包的时候丢失,这两个例子其实都 体现 出来了。

### Maven 资源插件的相关配置与使用 Maven 是由 Apache 开发的一款用于管理 Java 项目的工具,其核心功能包括依赖管理和项目构建[^2]。在 Maven 中,`maven-resources-plugin` 插件主要用于处理资源文件的复制和过滤操作。以下是关于 `maven-resources-plugin` 的具体配置和使用方法: #### 1. 默认目标及其作用 `maven-resources-plugin` 提供了多个默认的目标来帮助开发者完成不同的任务: - **resources**: 将主代码路径中的资源文件(如 `.properties`, `.xml` 文件)复制到编译输出目录中。 - **testResources**: 复制测试相关的资源文件到测试输出目录中。 - **copy-resources**: 手动指定要复制的资源文件,通常用于非标准目录下的资源文件复制。 - **help**: 显示插件的帮助信息。 这些目标可以通过命令行调用或者在生命周期阶段自动触发[^1]。 #### 2. 配置资源路径 如果希望 Maven 自动识别并处理特定目录下的资源文件,可以在 `pom.xml` 文件中通过 `<build>` 标签进行配置。例如: ```xml <build> <resources> <resource> <directory>src/main/config</directory> <includes> <include>*.properties</include> </includes> </resource> </resources> </build> ``` 上述配置会告诉 Maven 在打包过程中将 `src/main/config` 目录下的所有 `.properties` 文件作为资源文件处理。需要注意的是,默认情况下只有 `src/main/resources` 和 `src/test/resources` 会被视为资源目录[^3]。 #### 3. 使用过滤器替换占位符 Maven 支持通过 `${}` 占位符语法实现动态替换的功能。为了启用此功能,需要在 `pom.xml` 中开启资源过滤选项: ```xml <build> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> </build> ``` 当设置 `<filtering>true</filtering>` 后,在资源文件中可以使用类似于 `${propertyName}` 的形式定义变量,并通过 `-DpropertyName=value` 或者 `settings.xml` 来传递实际值。 #### 4. 设置 JVM 堆内存大小 对于某些场景下可能还需要调整容器内的 JVM 参数以优化性能表现。比如在一个基于 Tomcat 的 Docker 容器环境中,我们可以通过如下方式设定堆内存大小: ```bash docker exec -ti tomcat jps -lv | grep Bootstrap # 输出示例: 1 org.apache.catalina.startup.Bootstrap ... -Xms512M -Xmx512M ... ``` 这里展示了如何验证运行时参数是否生效以及具体的分配情况[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

怪 咖@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值