spring-boot-starter-parent作用及测试

spring-boot-starter-parent,Spring Boot应用的父级依赖;

一.简介:
提供了springboot统一的依赖管理和插件管理;
主要的依赖其实是继承了spring-boot-dependencies(通过标签dependencyManagement管理依赖声明),本质是继承了它然后扩展了插件配置;

spring-boot-starter-parent具体作用:
1.引入父pom里面的依赖时无须指定版本;
2.java版本,项目编码格式,资源引用描述符已经设置好
3.插件管理
a.封装了配置文件的过滤规则
b.封装了打可执行jar、war的配置
c.封装了插件的版本信息
d.封装了日期格式
e.引入了eclipse和IDEA相关依赖简化了配置,达到开箱即用等
。。。
这些从pom里面可以看到:(2.0.6)

4.0.0
    
        org.springframework.boot
        spring-boot-dependencies
        2.0.6.RELEASE
        ../../spring-boot-dependencies
    
    spring-boot-starter-parent
    pom

   -- java版本,项目编码格式,资源引用描述符
   
        UTF-8
        1.8
        @
        ${java.version}
        UTF-8
        ${java.version}
    

   --插件管理
   1.封装了配置文件的过滤规则
   2.封装了打可执行jar、war的配置
   3.封装了插件的版本信息
   4.引入了eclipse和IDEA相关依赖简化了配置,达到开箱即用等

        
            
                true
                ${basedir}/src/main/resources
                
                    **/application*.yml
                    **/application*.yaml
                    **/application*.properties
                
            
            
                ${basedir}/src/main/resources
                
                    **/application*.yml
                    **/application*.yaml
                    **/application*.properties
                
            
        
        
            
                
                    org.jetbrains.kotlin
                    kotlin-maven-plugin
                    ${kotlin.version}
                    
                        
                            compile
                            compile
                            
                                compile
                            
                        
                        
                            test-compile
                            test-compile
                            
                                test-compile
                            
                        
                    
                    
                        ${java.version}
                        true
                    
                
                
                    maven-compiler-plugin
                    
                        true
                    
                
                
                    maven-failsafe-plugin
                    
                        
                            
                                integration-test
                                verify
                            
                        
                    
                    
                        ${project.build.outputDirectory}
                    
                
                
                    maven-jar-plugin
                    
                        
                            
                                ${start-class}
                                true
                            
                        
                    
                
                
                    maven-war-plugin
                    
                        
                            
                                ${start-class}
                                true
                            
                        
                    
                
                
                    org.codehaus.mojo
                    exec-maven-plugin
                    
                        ${start-class}
                    
                
                
                    maven-resources-plugin
                    
                        
                            ${resource.delimiter}
                        
                        false
                    
                
                
                    pl.project13.maven
                    git-commit-id-plugin
                    
                        
                            
                                revision
                            
                        
                    
                    
                        true
                        yyyy-MM-dd'T'HH:mm:ssZ
                        true
                        ${project.build.outputDirectory}/git.properties
                    
                
                
                    org.springframework.boot
                    spring-boot-maven-plugin
                    
                        
                            
                                repackage
                            
                        
                    
                    
                        ${start-class}
                    
                
                
                    maven-shade-plugin
                    
                        
                            package
                            
                                shade
                            
                            
                                
                                    
                                        META-INF/spring.handlers
                                    
                                    
                                        META-INF/spring.factories
                                    
                                    
                                        META-INF/spring.schemas
                                    
                                    
                                    
                                        ${start-class}
                                    
                                
                            
                        
                    
                    
                        
                            org.springframework.boot
                            spring-boot-maven-plugin
                            2.0.6.RELEASE
                        
                    
                    
                        true
                        true
                        
                            
                                *:*
                                
                                    META-INF/*.SF
                                    META-INF/*.DSA
                                    META-INF/*.RSA
                                
                            
                        
                    
                
                
                    org.eclipse.m2e
                    lifecycle-mapping
                    1.0.0
                    
                        
                            
                                
                                    
                                        org.codehaus.mojo
                                        flatten-maven-plugin
                                        [1.0.0,)
                                        
                                            flatten
                                        
                                    
                                    
                                        
                                    
                                
                                
                                    
                                        org.apache.maven.plugins
                                        maven-checkstyle-plugin
                                        [3.0.0,)
                                        
                                            check
                                        
                                    
                                    
                                        
                                    
                                
                            
                        
                    
                
            
        
    

二.怎么体现上面的特点? 失去他你才懂得。。。
那么这里分2种情况:
2.1:不继承spring-boot-starter-parent,所有的依赖自已写



    4.0.0

    com.ysy
    spring-boot-01
    1.0-SNAPSHOT
    war
    
        
            org.springframework.boot
            spring-boot-starter-web
            2.0.6.RELEASE
        
    
    
    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
                2.0.6.RELEASE
            
        
    

虽然你本地可以正常起来跑起来;(依赖都有,当然可以跑起来)
但是打包会报错;使用mvn clean package指令或者Idea操作;

情况1.打war

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.2:war (default-war) on project spring-boot-01: Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode) -> [Help 1]
[ERROR] 

在上面的pom中,我并没有引入maven-war-plugin依赖;那它怎么来的呢?
看执行日志:

[INFO] -----------------------< com.ysy:spring-boot-01 >-----------------------
[INFO] Building spring-boot-01 1.0-SNAPSHOT
[INFO] --------------------------------[ war ]---------------------------------
Downloading from nexus-aliyun: http://maven.aliyun.com/nexus/content/groups/public/org/apache/maven/plugins/maven-war-plugin/2.2/maven-war-plugin-2.2.pom
Downloaded from nexus-aliyun: http://maven.aliyun.com/nexus/content/groups/public/org/apache/maven/plugins/maven-war-plugin/2.2/maven-war-plugin-2.2.pom (6.5 kB at 1.7 kB/s)
Downloading from nexus-aliyun: http://maven.aliyun.com/nexus/content/groups/public/org/apache/maven/plugins/maven-war-plugin/2.2/maven-war-plugin-2.2.jar
Downloaded from nexus-aliyun: http://maven.aliyun.com/nexus/content/groups/public/org/apache/maven/plugins/maven-war-plugin/2.2/maven-war-plugin-2.2.jar (79 kB at 53 kB/s)
[INFO] 

它会自动从远程仓库下载默认依赖
默认的war版本2.2是必须要求web应用存在web.xml的,于是报错;

在2.0.6的spring-boot-dependencies中可以知道;里面的maven-war-plugin是3.1.0;
spring-boot-maven-plugin是2.0.6;如下

 3.1.0
   
                    org.springframework.boot
                    spring-boot-maven-plugin
                    2.0.6.RELEASE
    

为了解决上面的报错;
那我在pom里面指定maven-war-plugin版本吧;

 
            
                org.apache.maven.plugins
                maven-war-plugin
                3.1.0
            

            
                org.springframework.boot
                spring-boot-maven-plugin
                2.0.6.RELEASE
            
        

然后再执行,嗯,打包成功了;
spring-boot-starter-parent作用及测试_第1张图片
开始跑跑:
spring-boot-starter-parent作用及测试_第2张图片
可以看到,启动失败了,没有找到启动类;
spring-boot-starter-parent作用及测试_第3张图片
原来:还需要对spring-boot-maven-plugin配置一下:

  
                org.springframework.boot
                spring-boot-maven-plugin
                2.0.6.RELEASE
                
                    
                        
                            repackage
                        
                    
                
            

再次打包成功启动;
spring-boot-starter-parent作用及测试_第4张图片
spring-boot-starter-parent作用及测试_第5张图片
而这些配置,在spring-boot-starter-parent里面全部都帮你配好了,让你远离这些坑。。

情况2.打jar,同理,也需要配置repackage才能变成可执行jar


            

            
                org.springframework.boot
                spring-boot-maven-plugin
                2.0.6.RELEASE
                
                    
                        
                            repackage
                        
                    
                
            
        

2.2:不继承spring-boot-starter-parent,但是继承spring-boot-dependencies

这个操作看似可以的,但是你只是继承了spring-boot-dependencies的依赖声明,但是插件管理还是需要你自已写的,如你打包时还是需要在pom声明repackage才能运行的;
而spring-boot-starter-parent已经帮你写好了插件管理及其他功能;
所以你要自已考虑清楚,自已是否需要扩展重新写自已的parent;

其中,如果你只想使用spring-boot-dependencies的依赖,可以用
dependencyManagement引入如下; 也可以你自已写重写一套依赖;


    
        
            
            org.springframework.boot
            spring-boot-dependencies
            2.2.4.RELEASE
            pom
            import
        
    

补充知识:父pom在被继承的时候,
dependencies与dependencyManagement的区别

1.dependencies即使在子项目中不写该依赖项,那么子项目仍然会从父项目中继承该依赖项(全部继承) ,管理的是具体的依赖关系;
2.dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显示的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。
,管理的是依赖的声明;

你可能感兴趣的:(spring,boot,java,spring,boot,maven)