Maven学习笔记(二)

来源:互联网 发布:人工智能 书籍 编辑:程序博客网 时间:2024/06/05 11:01

Maven学习笔记(二)

  • Maven学习笔记二
    • Maven的生命周期和插件
      • clean 清理项目
      • default 构建项目最核心
      • site 生成项目站点
    • pomxml的结构
    • 依赖的范围
    • 依赖冲突
    • 聚合与继承

1.Maven的生命周期和插件

clean\compile\test \package\install

完整的项目构建过程包括:
清理、编译、测试、打包、集成测试、验证、部署
Maven包含三套独立生命周期,执行某个命令,会依次顺序执行前面的命令,但不会处罚另外两套命令。

1.clean 清理项目

pre-clean 执行清理前的文件啊clean清理上一次构建生成的所有文件post-clean 执行清理后的文件。

2.default 构建项目(最核心)

compile test package install

3.site 生成项目站点

pre-site    在生成项目站点前要完成的工作site        生成项目的站点文档。post-site   在生成项目站点后要完成的工作。site-deploy 发布生成的站点到服务器上。

maven中的许多功能均是调用插件实现的。

例如:source插件可以将项目源码进行打包
步骤如下:
- 1.打开pom.xml,向其中加入如下代码

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

之后,进行maven操作时,需要:选中项目右键-》run as -》 maven build…
在goals中填写需要的maven操作。之后,直接敲击shift+alt+x+m即可直接运行maven命令。

2.pom.xml的结构

<project xmlns="...">    <!--指定当前pom的版本-->    <modelVersion>4.0.0</modelVersion>    <groupId>反写的公司网址+项目名</groupId>    <artifactId>项目名+模块名</artifactId>    <!--第一个0表示大版本号        第二个0表示分支版本号        第三个0表示小版本号        0.0.1        snapshot快照        alpha 内部测试        beta公测        Release 稳定        GA 正式发布    -->    <version></version>    <!--        默认是jar        war zip pom    -->    <package></package>    <!--项目描述名-->    <name></name>    <!--项目地址-->    <url></url>    <!--开发人员-->    <developers></developers>    <!--证书-->    <licenses></licenses>    <!--组织名-->    <organization></organization>    <!--依赖列表重中之重-->    <dependencies>        <dependency>            <groupId></groupId>            <artifactId></artifactId>            <version></version>            <type></type>            <!--依赖范围-->            <scope>test</scope>            <!--设置依赖是否可选,有两个值,true、false。默认是false,子项目是继承的。为true,子项目必须选择改该依赖-->            <optional></optional>            <!--排除依赖列表-->            <exclusions>                <exclusion>                </exclusion>            </exclusions>        </dependency>    </dependencies>    <!--依赖管理模块,定义在父类模块,供子模块继承使用,定义的依赖并不会在该模块中使用-->    <dependencyManagement>        <dependency>        </dependency>    </dependencyManagement>    <!--为构建行为提供相应的支持-->    <build>        <plugins>            <groupId></groupId>            <artifactId></artifactId>            <version></version>        </plugins>    </build>    <!--子模块对父模块pom的继承-->    <parent></parent>    <!--聚合运行多个的maven项目,使用此标签方便整体的打包-->    <modules></modules></project>

3.依赖的范围

编写项目,应用某一jar包,须将jar包引用到项目的classpath中。
maven中为我们提供了三种classpath:编译、测试、运行
就是来控制依赖与三中的classpath的关系。
dependency Scope共有6种值可供选择
compile、 默认的范围,比那一测试运行都有效
provided、 在编译测试和测试有效,例如:jdbc
runtime、 测试运行有效
test、 在测试有效
system、 编译测试有效,与本机系统相关联,可以执行差
import、 导入的范围,只是用子啊dependencyManagement中,表示从其它的pom中导入dependecy的配置。
例如:

<project>    <modelVersion>4.0.0<modelVersion>    <groupId>maven</groupId>    <artifactId>B</artifactId>    <package>pom</package>    <name>B</name>    <version>1.0</version>    <dependencyManagement>        <dependencies>            <dependency>            <!--将A中依赖导入到B中-->                <groupId>maven</groupId>                <artifactId>A</artifactId>                <package>pom</package>                <version>1.0</version>                <type>pom</type>                <scope>import</scope>            </dependency>        </dependencies>        <dependencies>            <dependency>                <groupId>test</groupId>                <artifactId>d</artifactId>                <package>pom</package>                <version>1.0</version>            </dependency>        </dependencies>    </dependencyManagement></project>

通过exclusions可以取消传递依赖。

4.依赖冲突

假设:A->B->C
B依赖common-2.0
C依赖common-2.4
则如果,A的pom中只写了依赖B,那么,A依赖的common是2.0版本(就近原则依赖)
如果,A的pom写了以来B,同时有写了以来C,且先声明的对C的依赖。则A依赖的common是2.4版本的(先声明,先依赖)

5.聚合与继承

聚合,既同时打包整个项目的多个模块,

../A
../B

继承,在开发多个模块时,可能有些模块共用了同一个依赖,则只需顶一个被继承者,使其他模块进行继承即可。
继承者pom.xml

<project>    <modelVersion>4.0.0<modelVersion>    <groupId>maven</groupId>    <artifactId>B</artifactId>    <package>pom</package>    <name>B</name>    <version>1.0</version><!--参数可以写入配置标签中-->    <properties>        <d.version>1.0</d.version>    </properties>    <dependencyManagement>        <dependencies>            <dependency>                <groupId>test</groupId>                    <artifactId>d</artifactId>                    <package>pom</package>                    <version>${d.version}</version>            </dependency>        </dependencies>    </dependencyManagement></project>

继承者的pom.xml添加:

<parent>    <groupId>maven</groupId>    <artifactId>B</artifactId>    <version>1.0</version></parent>

此处贴出博主编写的maven练习源码供大家参考学习,如有问题,欢迎大家共同讨论。

0 0