Maven_构建和pom.xml

概述

Maven是为Java项目提供构建和依赖管理支持的工具

构建环节

  1. 清理clean

    删除上一次构建的结果

  2. 编译compile

    Java源程序编译成*.class字节码文件

  3. 测试test

    运行提前准备好的测试程序,执行src/text/java下的junit测试用例

  4. 报告site

    每次测试后用标准格式记录和显示测试结果

  5. 打包package

    Java工程:jar包

    web工程:war包

  6. 安装install

    把一个Maven工程经过打包操作生成jar包或war包存入Maven仓库

  7. 部署deploy

    部署jar包:把一个jar包部署到服务器上

    部署war包:借助maven插件,将war包部署到tomcat服务器上

pom.xml

项目对象模型:将工程抽象为一个模型

<groupId>

公司或组织的id,即公司或组织域名的倒序,通常也会加上项目名称

<artifactId>

一个项目或者是项目中的一个模块的 id,即模块的名称,将来作为 Maven 工程的工程名

<version>

版本号

<scope>

依赖范围

  • compile:编译范围(默认依赖范围),编译范围的依赖会被打包

  • provided:当jdk或者一个容器提供该依赖后才使用。provided依赖在编译和测试时需要,运行时不需要(已经被容器提供了)

  • runtime:运行和测试时需要,编译时不需要,runtime范围的依赖会被打包

  • test:编译和运行时不需要,测试编译和测试运行时需要,不会被打包

  • system:一般不推荐使用,从系统路径引入项目

  • import:使用该依赖范围的dependency只能放在dependencyManagement中,且需要配合<type>pom</type>使用

    <type>pom</type>指定该工程的打包方式为pom,即只作为管理管理子工程依赖的项目,不打包

    使用该import之后就能使子工程都能使用该dependency管理的依赖版本

    示例代码:

    <dependencyManagement>
    	<dependencies>
    		<!-- SpringCloud的jar包依赖 -->
    		<dependency>
    			<groupId>org.springframework.cloud</groupId>
    			<artifactId>spring-cloud-dependencies</artifactId>
    			<version>Dalston.SR1</version>
    			<type>pom</type>
    			<scope>import</scope>
    		</dependency>
    		<!-- SpringBoot的jar包依赖 -->
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-dependencies</artifactId>
    			<version>1.5.9.RELEASE</version>
    			<type>pom</type>
    			<scope>import</scope>
    		</dependency>
    	</dependencies>
    </dependencyManagement>
    

    spring-cloud-dependenciesspring-boot-dependencies只是作为管理SpringCloud和SpringBoot依赖版本的父工程,在这里使用了import后,该工程的子工程都能免写SpringCloud和SpringBoot的依赖了

<exclude>

依赖排除,一般是为了避免jar包之间的冲突

代码示例:

<dependency>
	<groupId>net.javatv.maven</groupId>
	<artifactId>auth</artifactId>
	<version>1.0.0</version>
	<scope>compile</scope>
	<!-- 使用excludes标签配置依赖的排除	-->
	<exclusions>
		<!-- 在exclude标签中配置一个具体的排除 -->
		<exclusion>
			<!-- 指定要排除的依赖的坐标(不需要写version) -->
			<groupId>commons-logging</groupId>
			<artifactId>commons-logging</artifactId>
		</exclusion>
	</exclusions>
</dependency>

<module>

用于父工程指定子工程共有哪些,因为子工程一般是以模块的形式

示例:

<modules>
	<module>demo-module</module>
</modules>

<parent>

用于子工程指定父工程为什么

示例:

<parent>
	<artifactId>maven-demo-parent</artifactId>
    <groupId>net.javatv.maven</groupId>
    <version>1.0-SNAPSHOT</version>
</parent>

<dependencyManagement>

对依赖管理,实际上被管理的依赖没有真正被引入到工程

作用:帮助子工程对依赖的统一管理,子工程针对这些依赖可以省略版本号

子工程中引入该依赖时,被管理的依赖才被引入到工程

子工程也可以使用别的版本号来进行修改(一般是做升级)

<properties>

自定义属性,一般用自定义标签来维护版本数据

示例:

<properties>
    <!-- 自定义标签,维护Spring版本数据 -->
    <spring.version>5.3.19</spring.version>
</properties>

在需要的地方使用${}来引用自定义的属性名,实现一处修改 处处生效

示例:

	<dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-beans</artifactId>
                <version>${spring.version}</version>
            </dependency>

            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
                <version>${spring.version}</version>
            </dependency>

            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${spring.version}</version>
            </dependency>

            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aop</artifactId>
                <version>${spring.version}</version>
            </dependency>
        </dependencies>

<build>

子标签大致包含:定义约定的目录结构、备用插件管理、生命周期插件

约定的目录结构:

目录名作用
sourceDirectory主题源程序存放目录
scriptSourceDirectory脚本源程序存放目录
testSourceDirectory测试源程序存放目录
outputDirectory主体源程序编译结果输出目录
testOutputDirectory测试源程序编译结果输出目录
resources主体资源文件存放目录
testResources测试资源文件存放目录
directory构建结果输出目录

生命周期插件:

<plugin>

示例:

<plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.1</version>
    <executions>
        <execution>
            <id>default-compile</id>
            <phase>compile</phase>
            <goals>
                <goal>compile</goal>
            </goals>
        </execution>
        <execution>
            <id>default-testCompile</id>
            <phase>test-compile</phase>
            <goals>
                <goal>testCompile</goal>
            </goals>
        </execution>
    </executions>
</plugin>
  • artifactId 和 version 标签定义了插件的坐标,作为 Maven 的自带插件这里省略了 groupId

  • executions 标签内可以配置多个 execution 标签

    • id:指定唯一标识

    • phase:关联的生命周期阶段

    • goals/goal:关联指定生命周期的目标

      goals 标签中可以配置多个 goal 标签,表示一个生命周期环节可以对应当前插件的多个目标。

常用插件:

<build>
	<plugins>
		<!-- plugin 标签:这是我要指定的一个具体的插件 -->
        <plugin>
            <!-- 插件的坐标。此处引用的 maven-compiler-plugin 插件不是第三方的,是一个 Maven 自带的插件。 -->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <!-- configuration 标签:配置 maven-compiler-plugin 插件 -->
            <configuration>
                <!-- 具体配置信息会因为插件不同、需求不同而有所差异 -->
                <source>1.8</source>
                <target>1.8</target>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
        <!--SpringBoot提供的用来改变Maven默认的打包行为-->
        <plugin>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-maven-plugin</artifactId>
			<version>2.5.5</version>
		</plugin>
	</plugins>
</build>

<profile>

管理不同环境下的配置信息

没有在<profile>标签中的为默认的profile

激活profile

POM 中没有在 profile 标签里的就是默认的 profile,当然默认被激活

基于环境信息激活:

环境信息包含:JDK 版本、操作系统参数、文件、属性等各个方面。一个 profile 一旦被激活,那么它定义的所有配置都会覆盖原来 POM 中对应层次的元素。可参考下面的标签结构:

<profile>
	<id>dev</id>
    <activation>
        <!-- 配置是否默认激活 -->
    	<activeByDefault>false</activeByDefault>
        <jdk>1.5</jdk>
        <os>
        	<name>Windows XP</name>
            <family>Windows</family>
            <arch>x86</arch>
            <version>5.1.2600</version>
        </os>
        <property>
        	<name>mavenVersion</name>
            <value>2.0.5</value>
        </property>
        <file>
        	<exists>file2.properties</exists>
            <missing>file1.properties</missing>
        </file>
    </activation>
</profile>

Maven 3.2.2 开始:各条件均需满足该配置才会被激活。

多环境管理

<build>
    <!-- profile对资源的操作 -->
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <!-- 先排除所有环境相关的配置文件 -->
            <excludes>
                <exclude>application*.yml</exclude>
            </excludes>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
            <!-- 是否替换@xx@表示的maven properties/yml属性值 -->
            <!--通过开启 filtering,maven 会将properties/yml文件中的@xx@替换 profile 中定义的xx变量/属性-->
            <filtering>true</filtering>
            <includes>
                <include>application.yml</include>
                <include>application-${profileActive}.yml</include>
            </includes>
        </resource>
    </resources>
</build>


<!--多环境文件配置-->
<profiles>
    <!--开发环境-->
    <profile>
        <id>dev</id>
        <activation>
            <!--默认激活-->
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <profileActive>dev</profileActive>
        </properties>
    </profile>
    <!--测试环境-->
    <profile>
        <id>test</id>
        <properties>
            <profileActive>test</profileActive>
        </properties>
    </profile>
    <!--正式环境-->
    <profile>
        <id>prod</id>
        <properties>
            <profileActive>prod</profileActive>
        </properties>
    </profile>
</profiles>

在打包的时候可以选择打包其中一个环境的包(可以理解为选定某个profile为active)

SpringBoot 天然支持多环境配置,一般来说,application.yml存放公共的配置,application-dev.ymlapplication-test.ymlapplication.prod.yml分别存放三个环境的配置。

配置文件示例:

# 在这里当选定环境后就会将@profileActive@替换,例如dev
spring:
	profiles:
		active: '@profileActive@'
  • 7
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值