maven配置详解

Maven配置详解:

1.4.0.0Maven模型的版本号

公司名或是组织名

项目名

1.0.0-RC15

pom 打包类型:pom、jar、war

groupId、artifactId、version三个元素生成了一个Maven项目的基本坐标

项目名

 

2.    

        子模块

通过modules标签将项目的所有子项目引用进来,在build父级项目时,会根据子模块的相互依赖关系整理一个build顺序,然后依次build,所有的父级项目的packaging都为pom.

子项目配置:

        artifactId

        父groupId

        父version

3.

        1.5.6.RELEASE

 

 

    

           

            org.springframework.boot

            spring-boot-starter-parent

            ${spring.boot.version}

            pom

            import

        

  

依赖,version对应properties中定义好的版本${spring.boot.version}

Dependency scope 是用来限制Dependency的作用范围的.

(1).compile:默认值 他表示被依赖项目需要参与当前项目的编译,还有后续的测试,运行周期也参与其中,是一个比较强的依赖。打包的时候通常需要包含进去

(2).test:依赖项目仅仅参与测试相关的工作,包括测试代码的编译和执行,不会被打包,例如:junit

(3).runtime:表示被依赖项目无需参与项目的编译,不过后期的测试和运行周期需要其参与。与compile相比,跳过了编译而已。例如JDBC驱动,适用运行和测试阶段

(4).provided:打包的时候可以不用包进去,别的设施会提供。事实上该依赖理论上可以参与编译,测试,运行等周期。相当于compile,但是打包阶段做了exclude操作

(5).system:从参与度来说,和provided相同,不过被依赖项不会从maven仓库下载,而是从本地文件系统拿。需要添加systemPath的属性来定义路径

(6)import:通过标签只能继承一个父模块,实际开发中,用户很可能需要继承自己公司的标准parent配置,这个时候可以使用 scope=import 来实现多继承

            org.apache.zookeeper

            zookeeper

            ${zookeeper.version}

            

                

                    slf4j-log4j12

                    org.slf4j

                

            

 

Exclusion依赖排除,多重依赖问题

 

4.

    install  

    ${basedir}/target  

    ${artifactId}-${version}

  

    filters/filter1.properties

   

            

             META-INF/plexus  

             true  

            ${basedir}/src/main/plexus  

              

                configuration.xml  

              

              

                **/*.properties  

              

           

      

  用于指定使用的插件

          

            org.apache.maven.plugins  

            maven-jar-plugin  

            2.0  

            false  

            true  

              

                test  

              

            ...  

            ...  

          

    

      pluginManagement的配置和plugins的配置是一样的,只是用于继承,使得可以在子模块中使用。

          

              

              org.apache.maven.plugins  

              maven-jar-plugin  

              2.2  

                  

                      

                        pre-process-classes  

                        compile  

                          

                            jar  

                          

                          

                            pre-process  

                          

                      

                  

              

          

      

==  子pom中使用

    ...  

      

          

            org.apache.maven.plugins  

            maven-jar-plugin  

          

      

    ...  

==  

 

    

      

      ...  

      

  

存在两种build,一种是全局的,一种是profile 下的.

 1)defaultGoal

       执行build任务时,如果没有指定目标,将使用的默认值。

       如上配置:在命令行中执行mvn,则相当于执行mvn install

2)directory

      build目标文件的存放目录,默认在${basedir}/target目录

3)finalName

     build目标文件的名称,默认情况为${artifactId}-${version}

4)filter

定义*.properties文件,包含一个properties列表,该列表会应用到支持filter的resources中。也就是说,定义在filter的文件中的name=value键值对,会在build时代替${name}值应用到resources中。 maven的默认filter文件夹为${basedir}/src/main/filters

 

 1)resources

 一个resources元素的列表。每一个都描述与项目关联的文件是什么和在哪里

 2)targetPath

指定build后的resource存放的文件夹,默认是basedir。

通常被打包在jar中的resources的目标路径是META-INF

3)filtering

 true/false,表示为这个resource,filter是否激活

4)directory

 定义resource文件所在的文件夹,默认为${basedir}/src/main/resources

5)includes

指定哪些文件将被匹配,以*作为通配符

6)excludes

指定哪些文件将被忽略

7)testResources

定义和resource类似,只不过在test时使用

 

5.在开发过程中,我们的软件会面对不同的运行环境,比如开发环境、测试环境、生产环境,而我们的软件在不同的环境中,有的配置可能会不一样,比如数据源配置、日志文件配置、以及一些软件运行过程中的基本配置

一、使用Spring Boot Profiles

 

* 使用yml文件

 

首先,我们先创建一个名为 application.yml的属性文件,如下:

 

server:

  port: 8080

spring:

  profiles:

    active: dev

---

#development environment

spring:

  profiles: dev

server:

  port: 8885

datasource:

url: jdbc:mysql://localhost:3306/dev

username: root

    password: ***

---

#test environment

spring:

  profiles: test

server:

  port: 8886

datasource:

url: jdbc:mysql://localhost:3306/test

username: root

    password: ***

---

#production environment

spring:

  profiles: prod

server:

  port: 8888

datasource:

url: jdbc:mysql://localhost:3306/prod

username: root

    password: ***

application.yml文件分为四部分,使用 --- 来作为分隔符,第一部分通用配置部分,表示三个环境都通用的属性, 后面三段分别为:开发,测试,生产,用spring.profiles指定了一个值(开发为dev,测试为test,生产为prod),这个值表示该段配置应该用在哪个profile里面。

 

如果我们是本地启动,在通用配置里面可以设置调用哪个环境的profil,也就是第一段的spring.profiles.active=XXX, 其中XXX是后面3段中spring.profiles对应的value,通过这个就可以控制本地启动调用哪个环境的配置文件,例如:

 

spring:

    profiles:

        active: dev

表示默认 加载的就是开发环境的配置,如果dev换成test,则会加载测试环境的属性,以此类推。

 

注意:如果spring.profiles.active没有指定值,那么只会使用没有指定spring.profiles文件的值,也就是只会加载通用的配置。

 

启动参数

 

如果是部署到服务器的话,我们正常打成jar包,启动时通过 --spring.profiles.active=xxx 来控制加载哪个环境的配置,完整命令如下:

 

java -jar xxx.jar --spring.profiles.active=test 表示使用测试环境的配置

java -jar xxx.jar --spring.profiles.active=prod 表示使用生产环境的配置

 

*使用多个yml配置文件进行配置属性文件

 

我们也可以使用多个yml来配置属性,将于环境无关的属性放置到application.yml文件里面;通过与配置文件相同的命名规范,创建application-{profile}.yml文件 存放不同环境特有的配置,例如 application-test.yml 存放测试环境特有的配置属性,application-prod.yml 存放生产环境特有的配置属性。

 

通过这种形式来配置多个环境的属性文件,在application.yml文件里面spring.profiles.active=xxx来指定加载不同环境的配置,如果不指定,则默认只使用application.yml属性文件,不会加载其他的profiles的配置。

 

*. 使用properties文件

 

如果使用application.properties进行多个环境的配置,原理跟使用多个yml配置文件一致,创建application-{profile}.properties文件 存放不同环境特有的配置,将于环境无关的属性放置到application.properties文件里面,并在application.properties文件中通过spring.profiles.active=xxx 指定加载不同环境的配置。如果不指定,则默认加载application.properties的配置,不会加载带有profile的配置。

 

二、Maven Profile

 

如果我们使用的是构建工具是Maven,也可以通过Maven的profile特性来实现多环境配置打包。

 

pom.xml配置如下:

 

        

        

            dev

            

                dev

            

            

                true

            

        

        

        

            test

            

                test

            

        

        

        

            prod

            

                prod

            

        

    

 

    

        ${project.artifactId}

        

            

                src/main/resources

                false

            

            

                src/main/resources.${build.profile.id}

                false

resource的filtering属性用来表示资源文件中的占位符是否需要被替换,true为需要替换。

            

        

        

            

                org.springframework.boot

                spring-boot-maven-plugin

                

                    exec

                

            

        

    

通过执行 mvn clean package -P ${profile} 来指定使用哪个profile。

 

 

6.项目发布地址:

 

        

            releases

            nexus release repository

            http://localhost:8081/nexus/content/repositories/releases/

        

        

            snapshots

            nexus snapshot repository

            http://localhost:8081/nexus/content/repositories/snapshots/

        

    

 

7.仓库地址:

        

            nexus

            Nexus

            http://localhost:8081/nexus/content/groups/public

            

                true

            

            

                true

            

        

    

你可能感兴趣的:(maven配置详解)