Spring Cloud Alibaba-Maven(三)

570 阅读6分钟

简介

Apache Maven是一个软件项目管理和理解工具。基于项目对象模型(POM)的概念,Maven可以从中央信息管理项目的构建,报告和文档。官方网站

生命周期

在 Maven 中,有三套相互独立的生命周期,分别是 clean、default 和 site。每个生命周期都包括多个阶段,后一个阶段依赖前一个阶段,执行一个阶段会执行它之前的所有阶段。

  • clean:清理项目
  • default:构建项目
  • site:建立项目站点

clean

更详细的可以参见官网对生命周期的描述。官网生命周期描述

阶段 描述
pre-clean 在实际项目清理之前执行所需的过程
clean 删除上一版本生成的所有文件
post-clean 执行完成项目清理所需的过程

default

阶段 描述
validate 验证项目正确无误,并提供所有必要的信息
initialize 初始化构建状态,例如设置属性或创建目录
generate-sources 生成任何要包含在编译中的源代码
process-sources 处理源代码,例如过滤任何值
generate-resources 生成资源以包含在包中
process-resources 将资源复制并处理到目标目录中,以备打包
compile 编译项目的源代码
process-classes 对编译后生成的文件进行后处理,例如对Java类进行字节码增强
generate-test-sources 生成任何测试源代码以包含在编译中
process-test-sources 处理测试源代码,例如过滤所有值
generate-sources 生成任何要包含在编译中的源代码
generate-test-resources 创建测试资源
process-test-resources 将资源复制并处理到测试目标目录中
test-compile 将测试源代码编译到测试目标目录中
process-test-classes 从测试编译中对生成的文件进行后处理,例如对Java类进行字节码增强。对于Maven 2.0.5及更高版本
test 使用合适的单元测试框架运行测试。这些测试不应要求打包或部署代码
prepare-package 在实际包装之前执行准备包装所需的任何操作。这通常会导致包装的未包装,已处理版本。(Maven 2.1及更高版本)
package 获取编译后的代码,并将其打包为可分发格式,例如JAR
pre-integration-test 在执行集成测试之前执行所需的操作。这可能涉及诸如设置所需环境的事情
integration-test 处理该程序包,并在必要时将其部署到可以运行集成测试的环境中
post-integration-test 在执行集成测试后执行所需的操作。这可能包括清理环境
verify 运行任何检查以确认包装有效并符合质量标准
install 将软件包安装到本地存储库中,以作为本地其他项目中的依赖项
deploy 在集成或发行环境中完成后,将最终程序包复制到远程存储库,以便与其他开发人员和项目共享

site

阶段 描述
pre-site 在实际项目站点生成之前执行所需的过程
site 生成项目的站点文档
post-site 执行完成站点生成并为站点部署做准备所需的过程
site-deploy 将生成的站点文档部署到指定的Web服务器

命令

更详细的请参考官方描述

命令 描述
mvn clean 清理临时文件(例如target)
mvn compile 编译(例如src/main/java)
mvn test 测试(例如src/test/java/下junit的测试用例)
mvn package 打包(target目录生成jar或war等文件)
mvn install 将打包的jar/war文件复制到你的本地仓库中,供其他模块使用
mvn deploy 将打包的文件发布到远程参考,提供其他人员进行下载依赖
mvn site 生成项目相关信息的网站
mvn eclipse:eclipse 将项目转化为Eclipse项目
mvn dependency:tree 打印出项目的整个依赖树
mvn archetype:generate 创建Maven的普通java项目
mvn tomcat:run 在tomcat容器中运行web应用
mvn jetty:run 调用 Jetty 插件的 Run 目标在 Jetty Servlet 容器中启动 web 应用
mvn package -Dmaven.test.skip=true 打包但是不测试

profile

配置动态打包

  • 配置
<profiles>
    <profile>
        <!-- 开发环境 -->
        <id>dev</id>
        <properties>
            <profiles.active>dev</profiles.active>
        </properties>
        <activation>
            <!-- 默认激活 -->
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
    <profile>
        <!-- 测试环境 -->
        <id>beta</id>
        <properties>
            <profiles.active>beta</profiles.active>
        </properties>
    </profile>
    <profile>
        <!-- 发布环境 -->
        <id>prod</id>
        <properties>
            <profiles.active>release</profiles.active>
        </properties>
    </profile>
</profiles> 

<resources>
    <resource>
        <directory>src/main/resources</directory>
        <!--先全部排除-->
        <excludes>
            <exclude>application*.properties</exclude>
        </excludes>
    </resource>
    <resource>
        <directory>src/main/resources</directory>
        <!--打包相应的配置文件-->
        <filtering>true</filtering>
        <includes>
            <include>application.properties</include>
            <include>application-${profile.active}.properties</include>
        </includes>
    </resource>
</resources>
  • 命令
mvn clean package -P<profile_name>

POM

标签 描述
project 所有Maven pom.xml文件中的顶级元素
modelVersion 对象模型的版本
groupId 项目的组织或组的唯一标识符(通常域名倒置)
artifactId 项目名称
packaging 打包类型(例如JAR,WAR,EAR等)
version 项目版本
name 指示用于项目的显示名称。这通常在Maven的生成文档中使用
url 指示可以在哪里找到项目的站点。这通常在Maven的生成文档中使用
description 项目的基本描述
type 项目类型
scope 参与到哪个阶段(例如test表示仅仅参与到测试)

常见属性

scope属性

属性 描述
compile 默认配置,适用于所有阶段,会随着项目一起发布
provided 同compile,只是在打包阶段exclude
runtime 同compile,不参与编译,运行时加载
test 只在测试时使用,用于编译和运行测试代码。不会随项目发布
system 配合systemPath,从本地系统获取jar
  • Optional & Exclusions
    • Optional:Project-A -> Project-B -> Project-C, Project-C中使用true,可以传递到Project-B,无法传递到Project-A(需主动依赖)
    • Exclusions:排除传递过来的依赖

版本号说明

  • 语义化的版本控制
    • 2.1.9.RELEASE
      • 2 :主版本
      • 1 :次版本(功能增删但保持兼容)
      • 9 :增量版(bug修复)
      • RELEASE :SNAPSHOT:开发版 -> M: 里程碑 -> RELEASE: 正式版
  • Release Trains(Spring Cloud)
    • Greenwich.SR1
      • Greenwich: A->G,所以是第七代(伦敦地铁站名)
      • SR1: Service Release 1 正式版的第一个bug修复版本

最后

文章若有谬误之处,希望广大读者指正,互相交流,共同提高。