Maven中resources标签的用法详解

目录
  • 一、resources作用
    • 1、打包编译作用
    • 2、配置文件取pom当中的值
  • 二、演示resources打包编译的作用
    • 1、创建springboot项目
    • 2、进行编译打包
    • 3、出现问题
    • 4、得出结论
    • 5、添加resources进行解决
  • 三、演示application取pom当中值
    • 1、创建springboot项目
    • 2、进行编译打包
    • 3、得出结论
    • 4、添加resources进行解决
    • 5、疑问

在开发当中,我们一般打包都是利用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中resources标签的用法详解的文章就介绍到这了,更多相关Maven resources内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Maven项目中读取src/main/resources目录下的配置文件的方法

    在Maven项目的开发中,当需要读取src/下的配置文件时,该怎么做? 我们假设Resources下有一个文件名为kafka.properties的配置文件(为什么用kafka.properties,因为这是在做kafka项目的时候碰到的问题,在网上查到了不少信息,索性当个搬运工,再根据自己的理解整理一下) 1.在java类中读取 若配置文件不在src/main/resources目录下,可以直接使用 Properties prop = new properties(); prop.load(n

  • Maven项目中resources配置总结

    背景 通常Maven项目的文件目录结构如下: # Maven项目的标准目录结构 src main java #源文件 resources #资源文件 filters #资源过滤文件 config #配置文件 scripts #脚本文件 webapp #web应用文件 test java #测试源文件 resources #测试资源文件 filters #测试资源过滤文件 it #集成测试 assembly #assembly descriptors site #Site target gener

  • Maven项目读取resources文件路径问题解决方案

    读取resources下文件的方法 网上有问答如下: 问: new FileInputStream("src/main/resources/all.properties") new FileInputStream("./src/main/resources/all.properties") 上面两个无法读取maven下资源文件目录下的文件嘛,总是提示找不到该路径,这么写错了嘛,但是我的其他maven可以读取 答: 要取编译后的路径,而不是你看到的src/main/r

  • Maven中resources标签的用法详解

    目录 一.resources作用 1.打包编译作用 2.配置文件取pom当中的值 二.演示resources打包编译的作用 1.创建springboot项目 2.进行编译打包 3.出现问题 4.得出结论 5.添加resources进行解决 三.演示application取pom当中值 1.创建springboot项目 2.进行编译打包 3.得出结论 4.添加resources进行解决 5.疑问 在开发当中,我们一般打包都是利用maven打包的,在项目当中我们经常会看见resources标签,可能

  • JSP中EL表达式的用法详解(必看篇)

    EL 全名为Expression Language EL 语法很简单,它最大的特点就是使用上很方便.接下来介绍EL主要的语法结构: ${sessionScope.user.sex} 所有EL都是以${为起始.以}为结尾的.上述EL范例的意思是:从Session的范围中,取得 用户的性别.假若依照之前JSP Scriptlet的写法如下: User user =(User)session.getAttribute("user"); String sex =user.getSex( );

  • MyBatis动态Sql之if标签的用法详解

    最近在读刘增辉老师所著的<MyBatis从入门到精通>一书,很有收获,于是将自己学习的过程以博客形式输出,如有错误,欢迎指正,如帮助到你,不胜荣幸! 本篇博客主要讲解如何使用if标签生成动态的Sql,主要包含以下3个场景: 1.根据查询条件实现动态查询 2.根据参数值实现动态更新某些列 3.根据参数值实现动态插入某些列 1. 使用if标签实现动态查询 假设有这样1个需求:根据用户的输入条件来查询用户列表,如果输入了用户名,就根据用户名模糊查询,如果输入了邮箱,就根据邮箱精确查询,如果同时输入了

  • MyBatis动态SQL标签的用法详解

    1.MyBatis动态SQL MyBatis 的强大特性之一便是它的动态 SQL,即拼接SQL字符串.如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦.拼接的时候要确保不能忘了必要的空格,还要注意省掉列名列表最后的逗号.利用动态 SQL 这一特性可以彻底摆脱这种痛苦. 通常使用动态 SQL 不可能是独立的一部分,MyBatis 当然使用一种强大的动态 SQL 语言来改进这种情形,这种语言可以被用在任意的 SQL 映射语句中. 动态 SQL 元素和

  • JavaScript中window和document用法详解

    一.验证表单 封装一个函数用于验证手机号 /** * @param {String}eleId * @param {Object}reg */ function checkInput(eleId,reg) { var ele = document.getElementById(eleId); ele.onblur = function (ev) { if(!reg.test(this.value)){ //不匹配 this.style.borderColor = "#ff0000" /

  • Vue3中setup方法的用法详解

    目录 1.参数props 2.参数context 3. 子组件向父组件派发事件 4.优化事件派发 5.获取父组件传递的值 1.参数props props是一个对象,包含父组件传递给子组件的所有数据.在子组件中使用props进行接收.包含配置声明并传入的所有的属性的对象. 也就是说,如果你想通过props的方式输出父组件传递给子组件的值.你需要使用props进行接收配置.即props:{......}.如果你未通过Props进行接受配置,则输出的值是undefined <template> &l

  • Oracle中游标Cursor基本用法详解

    查询 SELECT语句用于从数据库中查询数据,当在PL/SQL中使用SELECT语句时,要与INTO子句一起使用,查询的 返回值被赋予INTO子句中的变量,变量的声明是在DELCARE中.SELECT INTO语法如下: SELECT [DISTICT|ALL]{*|column[,column,...]} INTO (variable[,variable,...] |record) FROM {table|(sub-query)}[alias] WHERE............ PL/SQL

  • oracle数据库中sql%notfound的用法详解

    SQL%NOTFOUND 是一个布尔值.与最近的sql语句(update,insert,delete,select)发生交互,当最近的一条sql语句没有涉及任何行的时候,则返回true.否则返回false.这样的语句在实际应用中,是非常有用的.例如要update一行数据时,如果没有找到,就可以作相应操作.如: begin update table_name set salary = 10000 where emp_id = 10; if sql%notfound then insert into

  • JavaScript中的splice方法用法详解

    JavaScript中的splice主要用来对js中的数组进行操作,包括删除,添加,替换等. 注意:这种方法会改变原始数组!. 1.删除-用于删除元素,两个参数,第一个参数(要删除第一项的位置),第二个参数(要删除的项数) 2.插入-向数组指定位置插入任意项元素.三个参数,第一个参数(插入位置),第二个参数(0),第三个参数(插入的项) 3.替换-向数组指定位置插入任意项元素,同时删除任意数量的项,三个参数.第一个参数(起始位置),第二个参数(删除的项数),第三个参数(插入任意数量的项) 示例:

  • 对pandas中apply函数的用法详解

    最近在使用apply函数,总结一下用法. apply函数可以对DataFrame对象进行操作,既可以作用于一行或者一列的元素,也可以作用于单个元素. 例:列元素 行元素 列 行 以上这篇对pandas中apply函数的用法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们. 您可能感兴趣的文章: 浅谈Pandas中map, applymap and apply的区别

随机推荐