天天看点

Spring Boot踩坑交流

问题:运行Spring Boot+Maven项目时clean失败

Spring Boot踩坑交流

父pom文件引用的maven插件资源版本

Spring Boot踩坑交流
  • 浅谈Maven 生命周期
  • 上述问题的解决方案

对Maven生命周期的理解

Maven的生命周期是对所有的构建过程进行抽象和统一,它的生命周期是抽象的,也就意味着生命周期本身不做任何实际的工作,生命周期只是定义了一系列的阶段,并确定这些阶段的执行顺序。而在执行这些阶段时,实际的工作还是由插件来完成的。

主要有三个内置的生成生命周期:

默认(default)—default生命周期处理项目部署

清空(clean)—clean生命周期处理项目清空

站点(site)—site生命周期处理项目站点文档的创建

生命周期的主要阶段有:

1.install-----在本地Maven Repository中安装jar,本地项目可以依赖,但是别人无法依赖;install时把target下的jar安装到本地仓库,供其他项目使用;在install之前务必要选择合适的setting配置好本地的Maven仓库,当出现install不到相关的jar包的时候,可选择更换setting文件,从不同的私服下载jar包;下载的依赖版本出现问题的时候,需要在(http://mvnrepository.com/)中查询版本号是否存在,选择合适的依赖。

Spring Boot踩坑交流
Spring Boot踩坑交流

2.clean-----清除项目下的target文件,执行clean 命令后的项目结构,没有target文件,target为输出目录,所有的输出都放在这个目录下,一般在提交项目至SVN时候切记不要提交,打包项目之前,务必要先clean一下项目,清除target目录下的文件

Spring Boot踩坑交流

3.compile-----编译项目的源代码,执行该命令后,target目录下生成classes文件夹,里面存放编译后的class文件

Spring Boot踩坑交流

4.package-----将项目中的各种文件,如源代码、编译生成的字节码、配置文件、文档,按照规范的格式生成归档,常见的就是JAR包和WAR包可用于发布。区别:package是把jar打到本项目的target下,而install时把target下的jar安装到本地仓库,供其他项目使用

Spring Boot踩坑交流

上述问题的解决方案:

在pom文件中添加下面的代码:分别执行clean,compile,install命令,执行成功

<build>
 <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-clean-plugin</artifactId>
                    <version>3.0.0</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.7.0</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-install-plugin</artifactId>
                    <version>2.5.2</version>
                </plugin>
            </plugins>
        </pluginManagement>
        </build>

           

对此段代码的理解:

pluginManagement 表示插件声明,在它下面声明的插件,maven是不会加载的,一般定义在父pom文件中,提供给子POM使用,当然了,子POM也可以覆盖这个定义;而且在父POM中定义了版本之后,子模块中直接应用groupId和artifactId,而不用指定版本,同时也方便统一管理;此外,父POM中的pluginManagement并不会介入到Maven的生命周期。

目的:主要是为了统一管理插件,确保所有子POM使用的插件版本保持一致

plugins的作用:给出构建过程中用到的插件,把写好的程序和程序本身所依赖的jar包一起build到一个包里,这是maven中针对打包任务而提供的标准插件。

如果是继承了父POM则不用显示指定插件的内容

Spring Boot踩坑交流

参考链接

  • [1]maven声明周期1
  • [2]maven生命周期详解2
  • [3]maven生命周期与插件

继续阅读