Maven总结

2018-08-07  本文已影响0人  lxian2shell

maven 项目骨架生成工具

 mvn archetype:generate

基本约定

mvn 构件坐标

通过坐标确定唯一的构件

依赖管理

<dependencies>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.2.3</version>
        <scope>compile</scope>
    </dependency>
</dependencies>

声明依赖的构件的基本坐标

传递律

依赖遵循传递律。若存在对同一构件不同版本的依赖则

  1. 依赖路径最短的优先
  2. 最先被读取的依赖优先。

scope

决定依赖是否被添加到对应的编译/测试/运行时的classpath 中。

scope 编译 测试 运行
compile y y y
test y
provided y y
runtime y y
system y y

provided 适用于运行时的库会存在在环境中,比如servlet-api
runtime 适用于编译时只需要interface, 实际运行时才会引入具体实现
system 适用于引用本机系统相关的依赖,依赖不由maven 管理,需要在systemPath 中声明

变量

生命周期

将生命周期的phase 作为参数传递给mvn 执行

mvn clean install

会顺序执行该phase前所有的phase,如mvn clean 会执行pre-clean, clean两个phase

列举三个生命周期中常见的phase

clean 清理

default 构建

site 建立站点

插件

获取插件信息

mvn help:describe -Dplugin=org.apache.maven.plugins:maven-clean-plugin:3.0.0 -Ddetail

插件定义了可执行的goal,可以通过

mvn {插件前缀}:{goal}
// 如 mvn clean:clean

插件:goal 直接执行
或者将插件绑定在phase 上,在执行phase 的时候执行

<build>
    <plugins>
        <plugin>
            <artifactId>maven-sources-plugin</artifactId>
            <version>3.0.2</version>
            <executions>
                <execution>
                    <id>attach-sources</id>
                    <phase>verify</phase>
                    <goals>
                        <goal>jar-no-fork</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

POM 聚合

将多个模块放到同一aggreator pom中,一次构建就可以构建所有模块

<groupId>com.lxian.playground</groupId>
<artifactId>playground-mvn-aggreator</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
    <module>playground-java</module>
    <module>playground-scala</module>
</modules>

POM 继承

常用的可以继承的元素

父pom packaging 需为pom

<groupId>com.lxian.playground</groupId>
<artifactId>playground-mvn-parent</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>

子pom 可以指定父pom 的相对路径,默认为 ../pom.xml。如果相对路径上没找到父pom,则会在本地仓库搜索。

<parent>
    <groupId>com.lxian.playground</groupId>
    <artifactId>playground-java</artifactId>
    <version>1.0-SNAPSHOT</version>
    <relativePath>../pom.xml</relativePath>
</parent>

仓库配置

坐标与路径

groupId/artifactId/version/artifactId-version.packaging

本地/远程仓库

本地仓库位置

~/.m2/repository

查找顺序

  1. system 依赖,从本地查找
  2. 从本地仓库查找
  3. 从远程仓库查找
  4. 如果是RELEASE 依赖,则读取远程 groupId/artifactId/version/maven-metadata.xml 确定最新发布版
  5. 如果是LATEST, 同上,查找包括snapshot 的最新版
  6. SNAPSHOT 则查找最新的 SNAPSHOT

构件会被先下载到本地再使用

配置

<repositories>
    <repository>
        <id>central</id>
        <name>Maven Central</name>
        <url>http://repo1.maven.org/maven2/</url>
        <releases>
            <enabled>true</enabled>
            <updatePolicy>daily</updatePolicy>
            <checksumPolicy>ignore</checksumPolicy>
        </releases>
        <snapshots>
            <enabled>true</enabled>
            <updatePolicy>always</updatePolicy>
        </snapshots>
    </repository>
</repositories>

认证

配置在settings.xml (密码和代码分离)

<servers>
  <server>
    <id>my-repo</id>
    <username></username>
    <password></password>
  <server>
</servers>

id 需要和pom repositories 里面的id 对应

部署配置

<distributionManagement>
    <repository>
        <id>my-release-repo</id>
        <name>My Release Repo</name>
        <url></url>
    </repository>
    <snapshotRepository>
        ...
    </snapshotRepository>
</distributionManagement>

Snapshot

Snapshot 的发布,会在版本后带上发布时的时间戳
Snapshot 的依赖会拉去最新的Snapshot 构件

上一篇 下一篇

猜你喜欢

热点阅读