Maven项目管理利器

2017-05-24  本文已影响49人  代号孤狼

我是一个要做程序员的男人。有问题可以随时联系我。

1、Maven快速入门

1.1 maven介绍及环境搭建

maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。
在apache官网下载maven安装包。
下载地址:https://maven.apache.org/download.cgi
目录结构如下:

1.2 maven目录结构

pom.xml说明

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    
    <!--项目包名-->
    <groupId>com.imooc.maven01</groupId>
    <!-- 模块名-->
    <artifactId>maven01-model</artifactId>
    <!-- 版本-->
    <version>0.0.1SNAPSHOT</version>
    
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.10</version>
        </dependency>
    </dependencies>
</project>

mvn compile 项目编译命令
mvn test 运行测试用力

执行完成测试后,得到一个target目录
classes ------------------ 项目字节码文件
maven-status ------------
surefire-reports ----------- 测试报告
test-classes --------------- 测试字节码文件

mvn package 打包,将项目打包成一个jar包
jar包名字由 模块名-版本名

2、Maven核心知识

2.1 maven基础知识

常用命令

mvn -v 查看版本
mvn compile 编译
mvn test 测试
mvn package 打包
mvn clean 删除target
mvn install 安装jar包到本地仓库

在此对mvn install进行说明,将项目发布到本地仓库,若有其他项目需要使用的时候直接在pom.xml中添加项目依赖,可以将该jar包加入使用

2.2 maven自动创建目录骨架

archetype插件用于创建maven规定的目录骨架

运行命令 mvn archetype:generate 进行构建目录骨架
输入以上的命令,在最后会要求输入 groupId artifactId version package
mvn archetype:generate -DgroupId:com.xxx.xxx -DartifactId=maven-demo -Dversion=1.0.0SNAPSHOT -Dpackage=com.xxx.xxx.maven-demo

2.3 maven中的坐标与仓库

在maven中任何一个依赖、插件项目输出可以认为是一个构件
构件通过坐标作为其唯一的标识
groupId artifactId version 构成唯一的坐标
仓库用来管理项目依赖的,仓库分为本地仓库远程仓库
远程仓库在lib/maven-model-builder-3.5.0.jar中的pom-4.0.0.xml,这是一个超级的pom所有都会继承此

<!--可以打开看到一个中央仓库地址-->
  <repositories>
    <repository>
      <id>central</id>    <!--中央仓库唯一标识-->
      <name>Central Repository</name>     <!--中央仓库名称-->
      <url>https://repo.maven.apache.org/maven2</url>   <!--中央仓库地址-->
      <layout>default</layout>   <--默认地址-->
      <snapshots>
        <enabled>false</enabled>   <--禁止下载快照-->
      </snapshots>
    </repository>
  </repositories>

镜像仓库,为了防止下载国外的比较慢
conf/settings.xml中找到<mirrors>标签添加

<!--以下只是例子-->
 <mirror>
      <id>maven.net.cn</id>
      <mirrorOf>central</mirrorOf>
      <name>central mirror in china</name>
      <url>http://maven.net.cn/content/groups/public</url>
    </mirror>

更改仓库位置
默认在当前用户的.m2目录中,mvn install发布的jar包也在此
找到conf/settings.xml中找到<localRepository>标签中,修改路径

<localRepository>/path/to/local/repo</localRepository>

2.4 maven的生命周期与插件

1、完成的项目构建过程过程:
clean、compile、test、package、install
清理、编译、测试、打包、集成测试、验证、部署
2、maven声明周期
clen 清理项目

default 构建项目(最核心)

site 生成项目站点

3、插件

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>2.4</version>
                <executions>
                    <execution>
                        <phase>package</phase> <!--执行阶段-->
                        <goals>
                            <goal>jar-no-fork</goal> <!--执行目标-->
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

2.5 pom.xml常用元素介绍

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <!--指定当前的pom版本-->
    <modelVersion>4.0.0</modelVersion>
    <!--包名=反写公司网址+项目名-->
    <groupId></groupId>
    <!--项目名+模块名-->
    <artifactId></artifactId>
    <!--
        第一个0表示大版本号
        第二个0表示分支版本号
        第三个0表示小版本号
        0.0.1
        snapshot快照
        alpha内部测试
        beta公测
        Release稳定
        GA正式版本
    -->
    <version>0.0.1SNAPSHOT</version>
    <!--默认jar
        其他war zip pom
    -->
    <packaging></packaging>
    <!--项目描述名-->
    <name></name>
    <!--项目地址-->
    <url></url>
    <!--项目描述-->
    <description></description>
    <!--开发人员信息-->
    <developers></developers>
    <!--许可证信息,开源框架-->
    <licenses></licenses>
    <!--组织信息-->
    <organization></organization>
    
    <!--继承的父模块-->
    <parent></parent>
    <!--指定多个模块进行编译-->
    <modules>
        <module></module>
    </modules>
    
    <!--依赖列表-->
    <dependencies>
        <!--依赖项-->
        <dependency>
            <!--三个坐标-->
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.10</version>
            <type></type>
            <!--依赖范围-->
            <scope>test</scope>
            <!--设置依赖是否可选 true false-->
            <optional></optional>
            <!--排除依赖列表-->
            <exclusions>
                <exclusion></exclusion>
            </exclusions>
        </dependency>
    </dependencies>
    
    <!--通常在父模块中使用-->
    <dependencyManagement>
        <dependencies>
            <dependency>
            </dependency>
        </dependencies>
    </dependencyManagement>
    
    <build>
        <!--插件列表-->
        <plugins>
            <plugin>
                <!--坐标-->
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>2.4</version>
                <executions>
                    <execution>
                        <phase>package</phase> <!--执行阶段-->
                        <goals>
                            <goal>jar-no-fork</goal> <!--执行目标-->
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

2.6 maven依赖范围

三种classpath:编译、测试、运行
test表示只存在于测试的classpath

<scope></scope>
中共有6中范围
compile:默认范围,编译测试运行都有效
provided:在编译和测试时有效
runtime:在测试和运行时有效
test:在测试有效
system:与本机系统相关联,可移植性差
import :导入的范围,只使用在dependencyManagement中,表示从其他的pom中导入的dependecy的配置

2.7maven依赖冲突

1、短路优先,优先解析短的版本
A->B->C->X(jar)
A->D->X(jar) 解析该版本
2、路径一致情况下,先声明先优先

2.8maven聚合和继承

对父pom.xml而言需要设置<packaging>pom</packaging>
<modeules>
..加入至模块的信息
<modeules>
对子模块而言需要设置
<parent>
     ...加入父的坐标
</parent>
上一篇下一篇

猜你喜欢

热点阅读