Maven中各标签的作用
install和deploy的区别
install是将jar包上传到本地仓库
deploy是将jar包上传到中心仓库
resources标签的用法详解(详解可以看siyuan)
自我总结resources标签的作用:
- 将一些资源纳入到打包文件中,如果不在resources标签中指定,会导致不能打包到jar包中。(哪些资源需要在resources标签中特别指定?)
- 将java中资源文件中的@xx@占位符替换成 maven中配置的属性值。
resources标签的filtering属性
在 Maven 项目中,src/main/resources
目录通常用于存放项目的资源文件,例如配置文件、属性文件等。Maven 提供了一些配置选项,可以用来过滤这些资源文件,其中就包括 filtering 属性。
当 filtering
属性被设置为 true
时,Maven 会在构建过程中对这些资源文件执行过滤操作。过滤操作指的是在将资源文件拷贝到目标目录之前,Maven 会查找并替换文件中的占位符,这些占位符通常是 ${propertyName}
形式的,其中 propertyName
是一个 Maven 属性。
例如,如果你在资源文件中有一个占位符 ${version}
,而且在你的 Maven POM 文件中定义了一个属性 version
,那么在构建过程中 Maven 会将 ${version}
替换为实际的版本号。
以下是一个简单的 Maven POM 配置示例,演示了如何配置 filtering
属性:
Copy code
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
在这个示例中,filtering
被设置为 true
,表示 src/main/resources
目录下的资源文件会被过滤。如果有需要过滤的属性,确保这些属性在 POM 文件中被定义,以便 Maven 替换相应的占位符。
这种过滤机制对于在不同环境中使用不同配置文件(例如开发环境和生产环境)非常有用。通过在资源文件中使用 Maven 属性,可以在构建过程中动态地替换这些属性,从而生成不同环境下适用的配置文件。
resources标签的delimiter属性
参考资料
delimiter的翻译是:分隔符
历史背景:
- 在pom文件内部对变量的应用,都通过${value_name}的方式,比如常见的${project.artifactId}。
- 在application.yml中对内部变量的引用,通常也是使用${value_name}的方式,比如常见的:${server.port}
这样就导致了一个冲突,两种配置文件都用同义词要标识符,那yaml文件怎么引入pom中的变量呢?于是就有了resource.delimiter这个属性。
如果查看spring-boot-starter-parent中的属性栏,就可以看到赫然写着:<resource.delimiter>@</resource.delimiter>
。
这表示,在yaml中如果要引用pom中的属性,直接使用@标识符就行了,用法为@value_of_pom
。
这样,就出现了第三种变量的引用方式:
- 在resources的yaml文件中引用pom中的变量时,通过
@value_of_pom@
进行引用(前提是开启了资源的过滤filtering)。
filtering作为maven-resource插件中的一个功能,它起作用的时机是在maven生命周期中的
resource
阶段,这是一个对资源做出处理,先于compile的一个阶段。
filtering:决定是否将resources目录下的文件中的tokens(即通过@val@标志的变量)进行参数替换。这里的参数主要有两个来源,一个是来自于pom文件中的properties属性,一个是来源于外部的.properties文件(作者认为这个文件不可与springboot中的配置文件混为一谈)。
那么如何引用外部的.properties文件呢?通过另一个标签