Maven 属性与资源过滤
在之前的章节中,我们已经介绍了 Maven 如何使用 Profile 来进行构建。类似的,对于 Maven 来说,还有很多其他的资源或者,而这些资源或者也都是可以进行过滤的,这一小节中,我们就重点介绍一下在什么情况下,需要过滤这些,并且要如何进行操作。
首先,我们来介绍一下 Maven 的特性。其实,在我们之前的章节中,一直都有在使用 Maven 的。例如我们在引入 Spring 框架的时候,将 Spring 框架的版本号信息抽象出来,放到 properties 节点中去,在使用这个版本号的时候,可以通过${}
来引用。
<properties>
<spring.version>4.0.2.RELEASE</spring.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
我们都知道抽象了spring.version
之后,可以减少我们很多的工作量,而且也便于我们对 pom.xml 的管理。在 Maven 的世界中,这只是其中一种。那我们来介绍一下 Maven 的的种类。
我们在很多地方都可以用到 Maven ,例如我们的示例项目中,多模块直接互相引用的时候,我们会用到${project.groupId}
和${project.version}
,来管理项目内部依赖。会用到${project.basedir}
来指定项目的路径。
这里就是之前章节中讲到的 Profile ,所以,我们就不做过多的介绍,可以移步到《Maven 使用 Profile 构建》一节进行学习。
我们使用 Maven 资源过滤的目的和使用 Profile 的目的很大程度上是类似的,就是为了增强项目构建的可移植性。之前我们在 Profile 的章节中,讲到了在构建项目的时候,激活对应的 Profile 来使用对应的配置,当时我们把配置都放在了中,因此,如果有多套环境的话,那么就相应的需要多套。
这里,我们换一种方式来进行资源过滤。在讲 Profile 的章节中,我们使用 mall-order 模块来演示,这次我们换为 mall-delivery 模块来演示。
首先在 src\main\resources
目录下application.yml
,用作。中的如下:
spring:
datasource:
driver-class-name: ${database.driverClass}
username: ${database.username}
password: ${database.password}
url: ${database.url}
type: com.alibaba.druid.pool.DruidDataSource
这里,可以看到,我们使用了${}
的方式来引用,这个可以定义在pom.xml
中。
接下来,我们就在pom.xml
中配置对应的。
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
<profiles>
<profile>
<id>dev</id>
<properties>
<database.driverClass>com..cj.jdbc.Driver</database.driverClass>
<database.url>jdbc:://localhost:3306/dev</database.url>
<database.username>userNameDev</database.username>
<database.password>passwordDev</database.password>
</properties>
</profile>
<profile>
<id>test</id>
<properties>
<database.driverClass>com..cj.jdbc.Driver</database.driverClass>
<database.url>jdbc:://localhost:3307/test</database.url>
<database.username>userNameTest</database.username>
<database.password>passwordTest</database.password>
</properties>
</profile>
</profiles>
通常情况下,资源过滤是的,如果需要开启,则需要我们手动设置 <filtering>true</filtering>
。认也是为了防止在构建的过程中发生一些不必要的过滤情况。
这里,我们分别配置了开发环境的信息和测试环境的信息(其实也是使用的 Profile 的方式)。其中 properties 节点配置了我们的,其与我们刚刚在application.yml
中配置的占位符是一样的。
接下来,我们进行项目构建可以指定对应的 Profile,执行 Maven 命令mvn clean package -Pdev
。构建完成后,我们可以查看target\classes
目录下的构建结果,会发现中的确是用的开发环境的 Profile,目的达成。
spring:
datasource:
driver-class-name: com..cj.jdbc.Driver
username: userNameDev
password: passwordDev
url: jdbc:://localhost:/dev
type: com.alibaba.druid.pool.DruidDataSource
以上的配置,还可以进行一下。由于我们平时更多的是在用开发环境的配置,因此,我们可以把开发环境的配置单独放置出来。
<build>
...
</build>
<properties>
<database.driverClass>com..cj.jdbc.Driver</database.driverClass>
<database.url>jdbc:://localhost:3306/dev</database.url>
<database.username>userNameDev</database.username>
<database.password>passwordDev</database.password>
</properties>
<profiles>
<profile>
<id>test</id>
<properties>
<database.driverClass>com..cj.jdbc.Driver</database.driverClass>
<database.url>jdbc:://localhost:3307/test</database.url>
<database.username>userNameTest</database.username>
<database.password>passwordTest</database.password>
</properties>
</profile>
</profiles>
这样之后,我们在进行开发环境构建的时候,不需要额外的参数,直接执行命令mvn clean package
即可正常构建。而当我们需要构建其他环境程序包的时候,则在命令后面对应的参数。
本文,我们承接《Maven 使用 Profile 构建》一节,继续介绍 Maven 的和资源过滤,学了这两节之后,能够更方便,更明晰的管理 pom.xml 中的依赖,也让多环境构建变得更加简单。