在不继承spring-boot-starter-parent新建一个SpringBoot项目时,可以还可以使用import范围限定的依赖项来保留依赖项管理:
<dependencyManagement><dependencies><dependency><!--ImportdependencymanagementfromSpringBoot--><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.5.0-RC1</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>
我们看到很多时候是没有这个 <dependencyManagement> 标签的,这个标签只是对版本进行管理,不会实际引入jar。
此时好奇一个问题,就去网上查了查,这么回答的:
maven中的 dependencies 和 dependencyManagement 有啥区别呢?
dependencymanagement 里面的只是声明依赖,并不实现引入,因此子项目需要显式的声明需要用的依赖。而dependencies相对于dependencymanagement,所有声明在dependencies里的依赖都会自动引入,并默认被所有的子项目继承。
maven 使用dependencymanagement 元素来提供了一种管理依赖版本号的方式。通常会在一个组织或者项目的最顶层的父pom中看到dependencymanagement 元素。使用pom.xml 中的dependencymanagement 元素能让所有在子项目中引用一个依赖而不用显式的列出版本号。maven 会沿着父子层次向上走,直到找到一个拥有dependencymanagement 元素的项目,然后它就会使用在这个dependencymanagement 元素中指定的版本号。
比如我们在项目中需要引入一个框架A的jar包:a.jar。而A框架的作者为了实现A框架又在其pom里面引入了spring框架,那么问题就来了,如果我们的项目也要用到spring框架,那spring框架的版本应该以谁的为准呢?
这可能就是dependencyManagement的作用了,你可以在dependencyManagement中对spring进行版本声明,然后你在dependencies中添加对A框架的引用,那么实际引入的spring版本就是你在dependencyManagement中声明的版本了。
自定义属性、默认值以及在命令行上覆盖属性
Spring Boot Maven Plugin 提供了许多以spring-boot开头的用户属性,也叫Goals,也可以理解为功能命令。可让您从命令行中自定义配置。
格式就是 mvn 加上以spring-boot开头的命令,然后在-D后面跟上要覆盖的参数。
例如,您可以调整配置文件以在运行应用程序时启用,如下所示:
$mvnspring-boot:run-Dspring-boot.run.profiles=dev,local
如果要在允许它们在命令行上覆盖的同时都具有默认值,则应结合使用用户提供的项目属性和或者自定义MOJO配置。
这里说的自定义属性配置,就是我们在pom文件的 <properties>标签中的属性,这里既可以配置系统属性、也可以自定义属性来让下面引用,引用语法为:${app.profiles}。
<properties><java.version>1.8</java.version><app.profiles>local,dev</app.profiles></properties>
例如:
<project><properties><app.profiles>local,dev</app.profiles></properties><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><profiles>${app.profiles}</profiles></configuration></plugin></plugins></build></project>
上面的命令可以确保local和dev默认情况下处于启用状态。现在公开了一个专用属性,也可以在命令行中覆盖它:
$mvnspring-boot:run-Dapp.profiles=test
命令行直接 -Dapp.profiles = test 就把默认的local,dev 改成了test。
以spring-boot开头的命令:
spring-boot:build-image使用buildpack将应用程序打包到OCI映像中。spring-boot:build-info根据当前MavenProject内容生成build-info.properties文件。spring-boot:help在spring-boot-maven-plugin上显示帮助信息。调用mvnspring-boot:help-Ddetail=true-Dgoal=<goal-name>以显示参数详细信息。spring-boot:repackage重新打包现有的JAR和WAR归档文件,以便可以使用命令行从命令行执行它们mvnspring-boot:help-Ddetail=true-Dgoal=<goal-name>也可以简单地用于打包具有嵌套依赖关系的JAR(并且没有主类,因此不是可执行文件)。spring-boot:run在适当位置运行应用程序。spring-boot:start启动spring应用程序。与run目标相反,这不会阻止并允许其他目标在应用程序上运行。此目标通常用于集成测试方案中,在该方案中,应用程序在测试套件之前启动,然后在测试套件之后停止。spring-boot:stop停止已通过“启动”目标启动的应用程序。通常在测试套件完成后调用。
END