springboot项目目录 (springcloud中pom文件详解)

springboot项目是ssm项目吗,pom文件详解

Java开发Spring项目最常用的开发工具就是 IntelliJ IDEA STS(Spring Tools Suite) 。本文介绍下如何利用IDEA创建一个SpringBoot的Maven项目,并详细介绍下Maven项目中不可缺少的Pom文件。

开始创建项目

IDEA中通常利用Spring Initializr 新建 项目(project) 模块(module) 来开发SpringBoot项目。首先要选择starter service地址,官方地址是 start.spring.io ,但有时连接这个网址会连不上,推荐选择国内的阿里云。

springboot项目是ssm项目吗,pom文件详解

Spring Initializr创建SpringBoot项目

接下来是配置项目参数。主要是项目名称、Java版本、项目版本这些参数。项目类型选择 Maven ,最后会生成一个Maven工程。Maven是Java开发最常用的项目管理工具,可以实现对项目的依赖管理和项目构建。Maven根据groupartifactversion这三个字段组合在一起的唯一坐标,在Maven仓库中定位到需要的jar包。

springboot项目是ssm项目吗,pom文件详解

Spring初始化项目参数

接下来是选择 项目依赖(Dependencies)

springboot项目是ssm项目吗,pom文件详解

最后设置 project name module name 。注意这个 name 不是 artifactId ,也不是 groupId 在构建项目时, <modules> <module> 所使用的是子项目名称就是这个 <name> 字段名。

Pom文件详解

基于Maven的项目构建完成以后,会发现生成了一系列文件,其中最重要的文件就是 pom.xml 文件,P OM文件主要描述了项目的描述,以及依赖关系。

<?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>
    <groupId>com.weishuo</groupId>
    <artifactId>demo01</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo01</name>
    <description>Demo project for Spring Boot</description>

POM是项目对象模型(Project Object Model)的简称, 在Maven世界中,一个项目可以什么都没有,甚至可以没有代码,但是不能没有pom.xml文件。

springboot项目是ssm项目吗,pom文件详解

Maven的核心概念:项目对象模型和依赖管理模型

接下来我们就来分段介绍Pom文件的组成。

根元素

对于一个pom.xml来说有几个元素是必须定义的,首先是 <project> 根元素,然后就是它里面的modelVersion、groupId、artifactId和version。

在上面的Pom文件的例子中:

  • 根节点就是 <project>
  • <modelVersion> 是4.0.0,这是当前仅有的可以被Maven2&3同时支持的POM版本.
  • 在Maven中,使用groupId、artifactId和version组成 groupdId:artifactId:version 的形式来唯一确定一个项目.

另外还有一些字段没有出现,比如 <type> 对应于依赖项目的packaging类型,默认是jar。

属性定义

<properties>
    <java.version>1.8</java.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <spring-boot.version>2.3.7.RELEASE</spring-boot.version>
</properties>

<properties> 用于定义全局变量,在POM中通过 ${property_name} 的形式引用变量的值。

项目依赖

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
        <exclusions>
            <exclusion>
                <groupId>org.junit.vintage</groupId>
                <artifactId>junit-vintage-engine</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

以上是项目依赖的其他项目,Maven可以根据pom文件中的依赖关系,从本地或远程的Maven仓库中自动*载下**项目锁依赖的Jar包。在B项目中引入A项目依赖,通过依赖传递,会将A中的jar包传递进来。如果B中不需要A中的某个jar包就可以使用以下标签:<exclusions> 。

junit-vintage 是 Junit 4 中使用的引擎,如果项目使用了 Junit 5 的话,需要在 spring-boot-starter-test 中将 JUnit 4 的引擎从测试中删除。junit-jupiter-engine 是 JUnit 5 中使用的测试引擎。

版本管理

Maven中的 dependencyManagement 的作用在于对所依赖的jar包的版本进行管理,与 <dependency>的区别在于,<dependency> 会直接*载下**jar包, <dependencyManagement> 不会*载下**jar包,而只是进行版本管理,比如:

  1. 如果 <dependencies> 里面的 <dependency> 没有声明 <version> 元素,那么maven就会到 <dependencyManagement> 里面去找有没有对该 artifactId groupId 进行过版本声明。如果有,就继承它;如果没有就会报错,必须为 dependency 声明一个 version
  2. 如果 <dependencies> 中的 <dependency> 声明了 <version> , 那么无论 <dependencyManagement> 中有无对该jar的 version 声明, 都以 dependency 里面的为准.

项目构建

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>2.3.7.RELEASE</version>
            <configuration>
                <mainClass>com.weishuo.demo01.Demo01Application</mainClass>
            </configuration>
            <executions>
                <execution>
                    <id>repackage</id>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

在Maven的pom.xml文件中,存在如下两种构建相关的配置 <build>

(1) 全局配置(project build) :针对整个项目的所有情况都有效

(2) 配置(profile build) :针对不同的profile配置

以上这段pom文件,主要定义了 < plugins> ,用于指定使用的插件:

(1)maven-compiler-plugin插件

如果我们不告诉maven:代码要使用什么样的jdk版本编译的话,它就会用maven-compiler-plugin默认的jdk版本来进行处理,这样就容易出现版本不匹配的问题,以至于可能导致编译不通过的问题。为了处理这一种情况的出现,在构建maven项目的时候,就是要配置maven-compiler-plugin插件。

(2)spring-boot-maven-plugin插件

Spring Boot Maven plugin能够将Spring Boot应用打包为可执行的jar或war文件,然后以通常的方式运行Spring Boot应用。

plugin可以有多个执行目标,每一个目标 <execution> 都有一个分开的配置,可以将执行目标绑定到不同的maven阶段。

Spring Boot Maven plugin的最主要goal就是 repackage ,其在Maven的package生命周期阶段,能够将 mvn package 生成的软件包,再次打包为可执行的软件包,并将 mvn package 生成的软件包重命名为 *.original

基于上述配置,对一个生成Jar软件包的项目执行如下命令

mvn package spring-boot:repackage  

可以看到生成的两个jar文件,一个是*.jar,另一个是*.jar.original

至此,一个刚创建的SpringBoot项目的POM文件的内容就介绍完了。

我会持续更新关于物联网、云原生以及数字科技方面的文章,用简单的语言描述复杂的技术,也会偶尔发表一下对IT产业的看法,请大家多多关注,欢迎留言和转发,希望与大家互动交流,谢谢。