一、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
- test
下面我们看一下测试用例的配置。
- 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实战》这本书的主要内容,但这还远远不够,书中还有很多的内容我们没有介绍,所以衷心的希望你才能通过本系列的分享,你能喜欢这本书,也希望这本书能够为你有所帮助,谢谢对码者支持。