maven配置详解

Maven配置详解:

1.<modelVersion>4.0.0</modelVersion>Maven模型的版本号

<groupId>公司名或是组织名</groupId>

<artifactId>项目名</artifactId>

<version>1.0.0-RC15</version>

<packaging>pom</packaging> 打包类型:pom、jar、war

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

<name>项目名</name>

 

2.    <modules>

        <module>子模块</module>

</modules>

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

子项目配置:

<parent>

        <artifactId>父artifactId</artifactId>

        <groupId>父groupId</groupId>

        <version>父version</version>

</parent>

3.<properties>

        <spring.boot.version>1.5.6.RELEASE</spring.boot.version>

 </properties>

 <dependencyManagement>

    <dependencies>

           <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-parent</artifactId>

            <version>${spring.boot.version}</version>

            <type>pom</type>

            <scope>import</scope>

        </dependency>

</dependencies>

  </dependencyManagement>

依赖,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>标签只能继承一个父模块,实际开发中,用户很可能需要继承自己公司的标准parent配置,这个时候可以使用 scope=import 来实现多继承

<dependency>

            <groupId>org.apache.zookeeper</groupId>

            <artifactId>zookeeper</artifactId>

            <version>${zookeeper.version}</version>

            <exclusions>

                <exclusion>

                    <artifactId>slf4j-log4j12</artifactId>

                    <groupId>org.slf4j</groupId>

                </exclusion>

            </exclusions>

 </dependency>

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

 

4.<build>

    <defaultGoal>install</defaultGoal>  

    <directory>${basedir}/target</directory>  

    <finalName>${artifactId}-${version}</finalName>

  <filters>

    <filter>filters/filter1.properties</filter>

</filters>

 <resources>  

          <resource>  

             <targetPath>META-INF/plexus</targetPath>  

             <filtering>true</filtering>  

            <directory>${basedir}/src/main/plexus</directory>  

            <includes>  

                <include>configuration.xml</include>  

            </includes>  

            <excludes>  

                <exclude>**/*.properties</exclude>  

            </excludes>  

         </resource>  

    </resources>  

<plugins>   用于指定使用的插件

        <plugin>  

            <groupId>org.apache.maven.plugins</groupId>  

            <artifactId>maven-jar-plugin</artifactId>  

            <version>2.0</version>  

            <extensions>false</extensions>  

            <inherited>true</inherited>  

            <configuration>  

                <classifier>test</classifier>  

            </configuration>  

            <dependencies>...</dependencies>  

            <executions>...</executions>  

        </plugin>  

    </plugins>

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

        <plugins>  

            <plugin>  

              <groupId>org.apache.maven.plugins</groupId>  

              <artifactId>maven-jar-plugin</artifactId>  

              <version>2.2</version>  

                <executions>  

                    <execution>  

                        <id>pre-process-classes</id>  

                        <phase>compile</phase>  

                        <goals>  

                            <goal>jar</goal>  

                        </goals>  

                        <configuration>  

                            <classifier>pre-process</classifier>  

                        </configuration>  

                    </execution>  

                </executions>  

            </plugin>  

        </plugins>  

    </pluginManagement>  

==<build>  子pom中使用

    ...  

    <plugins>  

        <plugin>  

            <groupId>org.apache.maven.plugins</groupId>  

            <artifactId>maven-jar-plugin</artifactId>  

        </plugin>  

    </plugins>  

    ...  

==</build>  

</build>  

  <profiles>  

    <profile>  

      <build>...</build>  

    </profile>  

  </profiles>

存在两种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配置如下:

 

<profiles>

        <!--开发环境-->

        <profile>

            <id>dev</id>

            <properties>

                <build.profile.id>dev</build.profile.id>

            </properties>

            <activation>

                <activeByDefault>true</activeByDefault>

            </activation>

        </profile>

        <!--测试环境-->

        <profile>

            <id>test</id>

            <properties>

                <build.profile.id>test</build.profile.id>

            </properties>

        </profile>

        <!--生产环境-->

        <profile>

            <id>prod</id>

            <properties>

                <build.profile.id>prod</build.profile.id>

            </properties>

        </profile>

    </profiles>

 

    <build>

        <finalName>${project.artifactId}</finalName>

        <resources>

            <resource>

                <directory>src/main/resources</directory>

                <filtering>false</filtering>

            </resource>

            <resource>

                <directory>src/main/resources.${build.profile.id}</directory>

                <filtering>false</filtering>

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

            </resource>

        </resources>

        <plugins>

            <plugin>

                <groupId>org.springframework.boot</groupId>

                <artifactId>spring-boot-maven-plugin</artifactId>

                <configuration>

                    <classifier>exec</classifier>

                </configuration>

            </plugin>

        </plugins>

    </build>

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

 

 

6.项目发布地址:

 

<distributionManagement>

        <repository>

            <id>releases</id>

            <name>nexus release repository</name>

            <url>http://localhost:8081/nexus/content/repositories/releases/</url>

        </repository>

        <snapshotRepository>

            <id>snapshots</id>

            <name>nexus snapshot repository</name>

            <url>http://localhost:8081/nexus/content/repositories/snapshots/</url>

        </snapshotRepository>

    </distributionManagement>

 

7.仓库地址:

<repositories>

        <repository>

            <id>nexus</id>

            <name>Nexus</name>

            <url>http://localhost:8081/nexus/content/groups/public</url>

            <releases>

                <enabled>true</enabled>

            </releases>

            <snapshots>

                <enabled>true</enabled>

            </snapshots>

        </repository>

    </repositories>

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值