maven 整理

230 阅读4分钟

仓库

本地仓库

第一次执行maven命令会被创建
在setting.xml中可以修改仓库位置
<localRepository>/Users/a565354062/environment/maven_repository</localRepository>

中央仓库

由maven社区提供,一般插件都可以从这里获取,不需要配置,需要联网

远程仓库

开发人员自己定制的仓库
简单构建一个私有仓库,可以使用aliyun:
rdc.aliyun.com,找到研发,下拉之后会有一个私有仓库,配置信息可以按照它的说明文档

仓库寻找构件流程

maven生命周期

标准生命周期分为三个,每个周期下面还有阶段
例如:一年有四个季度,每个季度下面还有月份

clean 项目清理的处理

pre-clean 清理前要做的工作

clean 清理,主要会将编译信息等清理

post-clean 清理后要做的工作

build(default) 项目部署

validate 检查项目中所有必要信息是否可用

他并不是检查代码的,而是检查pom(project object model)的
例如pom中,version属性是必须的,如果把它去掉,则会提示error

compile 编译代码

会把指定目录下的源代码编译,并把不需要的文件复制到相关目录下

test 测试

需要使用适当的测试框架例如JUnit
只要有一个测试失败,那么就build failure

package 创建在pom中所定义的包

包会放在target目录下,当然这个目录是可自定义的

verify 运行任意的检查来验证项目包有效且达到质量标准。

install 对打包的项目放到本地仓库,供其他项目使用

deploy 将项目打包到远程仓库,供其他开发者使用

需要配置文件,以下是以aliyun为例子,其他配置可以参考aliyun私有仓库文档
打开rdc.aliyun.com,找到研发--->私有仓库
    <distributionManagement>
        <repository>
          <id>rdc-releases</id>
          <url>https://repo.rdc.aliyun.com/repository/xxxx/</url>
        </repository>
        <snapshotRepository>
          <id>rdc-snapshots</id>
          <url>https://repo.rdc.aliyun.com/repository/xxx/</url>
        </snapshotRepository>
     </distributionManagement>

生命周期流程

生命周期是按照顺序执行的,前面的可以进行省略,例如执行mvn install,那么install前面的周期会按照顺序进行加载,当然也可一进行跳过 例如:mvn install -Dmaven.test.skip=true

sit 项目站点文档的创建

pre-site:执行一些需要在生成站点文档之前完成的工作

site:生成项目的站点文档

post-site: 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备

site-deploy:将生成的站点文档部署到特定的服务器上

插件

我们输入命令项目就会进行一些操作,这写操作由插件完成,生命周期插件父级pom中已经定义,也可以引入一些其他插件,例如mybatis-generator-plugin
例如我们运行mvn compile,其实他是由maven-compiler-plugin来完成的,所以也可以写出mvn compiler:compile
插件在pom文件中<build></build>中
例如编译
<build>
    <plugins>
        <plugin>
             <artifactId>maven-compiler-plugin</artifactId>
        </plugin>
    </plugins>
    <pluginManagement> 定义版本等信息的管理,上面就不需要写版本了
        <plugin>
             <artifactId>maven-compiler-plugin</artifactId>
             <version>3.8.0</version>
        </plugin>
    </pluginManagement>
</build>
插件列表可以参考:https://maven.apache.org/plugins/index.html

常用的属性

必须属性

modelVersion                模型
groupId                     组织域名+项目名称
artifavtId                  项目模块
version                     版本
packaging                   打包类型:jar、war、ear、pom等

非必备属性

dependencies [
    dependency {
        scope   作用范围compile, provided, runtime, test,                        system,这里设计到依赖的传递
        
    }
]
parent {        继承父级,例如版本信息,通用的jar包等
    groupId
    artifactId
    version
    relativePath
}
properties {    自定义变量通过${var}来引用
    
}
build {
    sourceDirectory         源文件代码目录
    scriptSourceDirectory   脚本源代码目录
    testSourceDirectory     测试源代码目录
    outputDirectory         源文件class文件输出目录
    testOutputDirectory     测试源文件class输出目录
    plugins [               插件集合,例如打包,编译,mybatis-generator

    ]
    pluginManagement [ 插件管理,例如版本等
    ]
}
modules [   模块,比如支付项目,有微信支付,支付宝支付,银行卡支付,把三个子模块集成到大模块中,打包的时候可以把三个一同加载,用的时候只需要引入支付模块就可以了,而不用分别引入
    module
]
dependencyManagement {  依赖管理,比如开发微服务的时候,各种包的版本比较难管理,可以直接引入管理包,那么其他依赖会自动向这个管理考齐
    dependencies [
        {
            groupId
            artifactId
        }
    ]
}
repositories [ 拓展远程仓库,也可以是自定义的远程仓库

]
distributionManagement{项目分发信息,执行deploy 后会将项目上传到远程仓库
    repository {
        id
        url
    }
    snapshotRepository {
        id
        url
    }
}
name                项目的名称
url                 项目主页的url
description         项目的描述
developers [        项目的开发者
    {
        id          开发者的唯一标识
        name        开发者的名称
        email       开发者的邮箱
        url         开发者的主页
        roles [     开发者在项目中扮演的角色
            role    描述各种角色,例如:管理者,开发者
        ]
        organization    所属组织
        organizationUrl 组织url
    }
]
contributors[   其他贡献者,属性参考developer
]

依赖传递