您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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 中的依赖,也让多环境构建变得更加简单。


联系我
置顶