Maven实战-第二十四篇(最终篇)

Maven实战-第二十四篇(最终篇)

一、Maven中的内置属性

下面我们介绍一下Maven中的内置属性,在Maven插件开发那篇文章中我们简单的介绍过,这篇我们在介绍一下。下面就是Maven为我们提供的所有内置的属性。

  • ${project.build.sourceDirectory}:项目的主源码目录,默认为src/main/java/。
  • ${project.build.testSourceDirectory}:项目的测试源码目录,默认为src/test/java/。
  • ${project.build.directory}:项目构建输出目录,默认为target/。
  • ${project.outputDirectory}:项目主代码编译输出目录,默认为target/classes/。
  • ${project.testOutputDirectory}:项目测试代码编译输出目录,默认为target/test-classes/。
  • ${project.groupId}:项目的groupId。
  • ${project.artifactId}:项目的artifactId。
  • ${project.version}:项目的version,与${version}等价。
  • ${project.build.finalName}:项目打包输出文件的名称,默认为${project.artifactId}-${project.version}。

我们在实际的开发中,可以通过我们具体的需求使用上述的内置属性,并且我们也可以通过组合的方式使用上述的内置属性。

二、Maven构建不同环境配置

下面我们介绍一下如何通过Maven构建不同的环境配置,因为在实际的项目开发中通常会遇到这样的问题,例如开发环境和测试环境,但这两个环境的配置是不同的,例如数据库的配置。下面我们以不同环境的数据库配置为例子,来介绍一下,如何通过Maven配置不同的环境。为了方便我们测试,我们以SpringBoot项目为例子演示。

  • application.yml
spring:
  profiles:
    active: @profiles.active@
  • application-dev.yml
spring:
  datasource:
    username: root
    password: jilinwula
    url: jdbc:mysql://localhost:3306/dev
    driver-class-name: com.mysql.cj.jdbc.Driver
  • application-test.yml
spring:
  datasource:
    username: root
    password: jilinwula
    url: jdbc:mysql://localhost:3306/test
    driver-class-name: com.mysql.cj.jdbc.Driver

上面我们配置了两个不同环境的配置,为了演示方便我们针对上面不同环境的配置,创建了两个数据库,并且在这个数据库中添加了两个不同环境的数据,下面我们看一下数据库的信息。

  • dev

Maven实战-第二十四篇(最终篇)

  • test

Maven实战-第二十四篇(最终篇)

下面我们看一下测试用例的配置。

  • MazheMavenSpringbootApplicationTests
package cn.mazhe.mazhe.maven.springboot;

import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.test.context.junit4.SpringRunner;

import javax.sql.DataSource;
import java.util.List;
import java.util.Map;

@RunWith(SpringRunner.class)
@SpringBootTest
class MazheMavenSpringbootApplicationTests {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Test
    public void queryForList() {
        String sql = "select id,username,password from userinfo";
        List<Map<String,Object>> lists = jdbcTemplate.queryForList(sql);
        System.out.println(lists);
    }
}

下面我们看一下pom.xml中的配置。因为里面会有一些SringBoot中的依赖配置,我们先忽略,只看相关环境的配置即可。

  • pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.3.RELEASE</version>
        <relativePath/>
    </parent>
    <groupId>cn.ma-zhe</groupId>
    <artifactId>mazhe-maven-springboot</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>mazhe-maven-springboot</name>
    <description>mazhe-maven-springboot</description>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>

        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <version>8.1.0</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <profiles>
        <profile>
            <id>dev</id>
            <properties>
                <profiles.active>dev</profiles.active>
            </properties>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <profile>
            <id>test</id>
            <properties>
                <profiles.active>test</profiles.active>
            </properties>
        </profile>
    </profiles>
</project>

上面配置是项目的全部配置,我们重点看一下profiles标签的内容,我们配置了两个profile配置,并且指定了dev配置为默认的配置,因为我们配置了activeByDefault标签。下面我们执行一下项目的打包命令。因为我们之前介绍过,当我们执行项目打包命令时,Maven就会自动执行测试用例,然后我们通过观察测试用例的输出来验证,我们是否支持了多环境的配置,下面是Maven的打包命令。

  • 打包
mvn clean package
  • 日志
2023-08-27 18:01:08.353  INFO 6290 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2023-08-27 18:01:09.018  INFO 6290 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
[{id=1, username=dev, password=dev.com}]
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 3.863 s - in cn.mazhe.mazhe.maven.springboot.MazheMavenSpringbootApplicationTests
2023-08-27 18:01:09.109  INFO 6290 --- [extShutdownHook] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown initiated...
2023-08-27 18:01:09.116  INFO 6290 --- [extShutdownHook] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown completed.
2023-08-27 18:01:09.116  INFO 6290 --- [extShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor  : Shutting down ExecutorService 'applicationTaskExecutor'
[INFO] 
[INFO] Results:
[INFO] 
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO] 
[INFO] 
[INFO] --- jar:3.2.0:jar (default-jar) @ mazhe-maven-springboot ---
[INFO] Building jar: /Users/md/IdeaProjects/mazhe/maven/mazhe-maven-springboot/target/mazhe-maven-springboot-0.0.1-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  8.851 s
[INFO] Finished at: 2023-08-27T18:01:09+08:00
[INFO] ------------------------------------------------------------------------

我们看上面的日志,成功的输出我们dev数据库中的数据了,因为我们配置了dev为默认的配置,下面我们通过配置指定一下让Maven执行test环境的配置,具体配置如下:

  • 打包
mvn clean package -Ptest
  • 日志
2023-08-27 18:07:56.780  INFO 6473 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2023-08-27 18:07:57.469  INFO 6473 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
[{id=1, username=test, password=test.com}]
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 3.863 s - in cn.mazhe.mazhe.maven.springboot.MazheMavenSpringbootApplicationTests
2023-08-27 18:07:57.560  INFO 6473 --- [extShutdownHook] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown initiated...
2023-08-27 18:07:57.567  INFO 6473 --- [extShutdownHook] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown completed.
2023-08-27 18:07:57.568  INFO 6473 --- [extShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor  : Shutting down ExecutorService 'applicationTaskExecutor'
[INFO] 
[INFO] Results:
[INFO] 
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO] 
[INFO] 
[INFO] --- jar:3.2.0:jar (default-jar) @ mazhe-maven-springboot ---
[INFO] Building jar: /Users/md/IdeaProjects/mazhe/maven/mazhe-maven-springboot/target/mazhe-maven-springboot-0.0.1-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  8.855 s
[INFO] Finished at: 2023-08-27T18:07:58+08:00
[INFO] ------------------------------------------------------------------------

我们看上面的日志成功的显示出test环境的数据信息了,这样我们就可以通过配置的方式,来动态配置环境了。


三、总结

以上内容就是本篇的全部内容,也是本系列的最后一篇文章,我们通过二十四篇的分享详细的介绍了《Maven实战》这本书的主要内容,但这还远远不够,书中还有很多的内容我们没有介绍,所以衷心的希望你才能通过本系列的分享,你能喜欢这本书,也希望这本书能够为你有所帮助,谢谢对码者支持。

给TA打赏
共{{data.count}}人
人已打赏
Maven

Maven实战-第二十三篇(用Maven进行代码测试)

2023-8-26 18:08:22

Maven

Maven实战-第十八篇(Maven中的默认约定)

2023-8-13 7:22:42