一. 常用命令

1. 编译 mvn compile
2. 打包 mvn package
3. 测试 mvn test
4. 清理 mvn clean
5. 安装jar包到本地仓库 mvn install
6. 自动创建基本目录 mvn archetype:generate
-DgroupId = 组织名 + 项目名 (org.zuel.xxx) -DartifactId = 项目名 -Dversion = 版本号 -Dpackage = 代码初始包名

 

二. 生命周期

clean -> compile -> test -> package -> install 依次执行
1. clean 清理项目
a. pre-clean 清理前工作
b. clean 清理上一次构建生成文件
c. post-clean 清理后工作

2. default 构建项目
a. compile
b. test
c. package
d. install

3. site 生成项目站点
a. pre-site 生成站点前工作
b. site 生成站点文档
c. post-site 生成后工作
d. site-deploy 发布站点到服务器

三. pom简介
1. 当前pom版本

<modelVersion>4.0.0</modelVersion> 

 

2. 主体信息

<groupId>org.zuel</groupId> 
<artifactId>proj + module</artifactId>
<!-- 第一位大版本号, 第二位分支版本号, 第三位小版本号 
snapshot快照, alpha内测, beta公测, Release稳定, GA发布-->
<version>0.0.1snapshot</version> 
<!-- 打包方式, 默认jar, 还有war, zip, pom -->
<packaging>jar</packaging>
<!-- 项目描述名 -->
<name></name>
<!-- 项目地址 -->
<url></url>
<!-- 项目描述 -->
<description></description>
<!-- 开发者 -->
<developers></developers>
<!-- 许可信息 -->
<licenses></licenses>
<organization></organization>

 

3. 依赖信息

<dependencies>
    <dependency>
        <groupId><groupId>
        <artifactId><artifactId>
        <version><version>
        <!-- 依赖类型 -->
        <type><type>
        <!-- 依赖范围 -->
        <scope><scope>
        <!-- 设置依赖是否可选, 默认false, 其他值true -->
        <optional></optional>
        <!-- 排除依赖传递列表 -->
        <exclusions>
            <exclusion></exclusion>
        </exclusions>
    </dependency>
</dependencies>

<!-- 用于子模块继承, 只在此作为声明,
    子模块仍需要配置但不需要版本号 -->
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId><groupId>
            <artifactId><artifactId>
            <version><version>
        </dependency>
    </dependencies>
</dependencyManagement>

 

 

4. 聚合继承

<!-- 子模块pom继承父模块pom -->
<parent>
    <groupId><groupId>
    <artifactId><artifactId>
    <version><version>
</parent>
<!-- 聚合运行多个mvn项目 -->
<modules>
    <!-- 模块相对路径 -->
    <module></module>
</modules>

 

5. 构建信息

<!-- 构建管理 -->
<build>
    <!-- 插件列表 -->
    <plugins>
        <plugin>
            <groupId><groupId>
            <artifactId><artifactId>
            <version><version>
        </plugin>
    <plugins>
</build>

 

四. 依赖详解
1. scope
a. complie 默认范围, 编译测试运行都有效
b. provided 编译测试有效, 运行无效
c. runtime 测试和运行有效
d. test 测试范围有效
e. system 类似provided编译测试有效, 移植性差
f. import 导入范围, 只使用在dependencyManagement中, 表示从其他pom导入dependency配置
e.g: 将A中的依赖导入到B中

<project >
            
    <groupId>example</groupId>
    <artifactId>B</artifactId>
     <!--       ……    -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>example</groupId>
                <artifactId>A</artifactId>
                <version>1.0.0</version>
                <type>pom<type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

</project>

 

 

 

2. 依赖传递 exclusions
A依赖B, B依赖C, 则A间接依赖C, 则A的依赖列表会出现C, 可排除对C依赖

<exclusions>
    <exclusion>
        <groupId>example<groupId>
        <artifactId>C<artifactId>
    <exclusion>
<exclusions>

 

3. 依赖冲突与原则
a. 短路优先
e.g: A -> B -> C -> X1(jar) 与 A -> D -> X2(jar), A会优先依赖D所依赖的X2
b. 路径长度相同, 先声明优先
e.g: A -> B -> X1(jar) 与 A -> C -> X2(jar), 取决于B与C在A的依赖列表里的顺序, 如下会依赖X1

<dependencies>
    <dependency>
        <groupId>example</groupId>
        <artifactId>B</artifactId>
        <version>1.0.0</version>
    </dependency>
    <dependency>
        <groupId>example</groupId>
        <artifactId>C</artifactId>
        <version>1.0.0</version>
    </dependency>
</dependencies>

 

4. 聚合
批量对多个项目进行操作, 新建一个容器项目然后作如下配置

<packaging>pom</packaging>
<modules>
    <module>../mvnModule1</module>
    <module>../mvnModule2</module>
</modules>

 

5. 继承

a. 父模块配置

<project ……>

    <groupId>org.zuel.mvn.demo</groupId>
    <artifactId>mvnParent</artifactId>
    <version>1.0-SNAPSHOT</version>

    <packaging>pom</packaging>

    <properties>
        <junit.version>4.12</junit.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <modules>
        <module>mvnModule1</module>
        <module>mvnModule2</module>
    </modules>

</project>

 

 

b. 子模块配置

<project ……>

    <groupId>org.zuel.mvn.demo</groupId>
    <artifactId>mvnModule1</artifactId>
    <version>1.0-SNAPSHOT</version>

    <parent>
        <groupId>org.zuel.mvn.demo</groupId>
        <artifactId>mvnParent</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>
    </dependencies>

</project>

 

五. idea相关

1. 手动指定mvn配置
Settings -> Build… -> Build Tools -> Maven -> User setting file

2. 导入失败考虑手动指定jdk
Settings -> Build… -> Build Tools -> Maven -> Importing -> JDK for importer