maven

Maven中各标签的作用

参考链接

install和deploy的区别

install是将jar包上传到本地仓库
deploy是将jar包上传到中心仓库

resources标签的用法详解(详解可以看siyuan)

自我总结resources标签的作用:

  1. 将一些资源纳入到打包文件中,如果不在resources标签中指定,会导致不能打包到jar包中。(哪些资源需要在resources标签中特别指定?)
  2. 将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的翻译是:分隔符

历史背景:

  1. 在pom文件内部对变量的应用,都通过${value_name}的方式,比如常见的${project.artifactId}。
  2. 在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文件呢?通过另一个标签下的进行路径的指定。

posted on 2024-01-30 08:17  wucanqin  阅读(7)  评论(0编辑  收藏  举报

导航