转载

Spring Cloud Alibaba-Maven(三)

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修复版本
原文  https://juejin.im/post/5da0304cf265da5bb628e3fc
正文到此结束
Loading...