Maven学习总结

来源:互联网 发布:instsee新域名 编辑:程序博客网 时间:2024/06/08 16:14

Maven概念

Maven是一种基于项目对象模型(POM)可以通过一小段描述信息(pom.xml)来管理项目的构建、报告和文档的软件项目管理工具。

ps: java 项目的依赖管理,非常方便;

Maven安装

下载maven,配置环境变量,可通过mvn -v来测试maven安装是否成功。

Maven安装文件的目录结构:
bin目录包含mvn的运行脚本,
boot目录包含一个类加载器框架,
conf目录包含配置文件,
lib目录包含所需要的类库

Maven安装时的注意事项:

1、在目录中创建一个maven文件夹(~/.m2/repository),将maven安装文件中的setting.xml(在conf文件夹下)拷贝过来,目的是转移工厂到自己的位置中,默认是我的文档/.m2/repository,修改setting.xml加入自己的路径:

1
<localResositoty>~/.m2/repository</localResositoty>

同时将安装文件中的setting.xml也加入此段配置代码。


2、知道中央工厂所在的位置,在lib文件下的maven-model-builder.jar文件中。

maven常用的构建命令:

mvn -v 查看maven版本mvn compile 编译mvn test 测试mvn package 打包mvn clean  删除maven在target中所生成的字节码文件mvn install 安装jar包到本地仓库中

创建目录的两种方式:
1、archetype:generate 按照提示进行选择


2、archetype:generate -Dgroup=组织名
-DartifactId=项目名-模块名
-Dversion=版本号
-Dpackage= 代码所在的包名

maven生命周期:clean清理项目、default构建项目、site生成项目站点

在eclipse中创建maven项目

1、下载并正确安装eclipse;2、在eclipse上成功安装maven插件;3、成功安装插件后,在eclipse上File/New/Other、选择Maven项目。

maven项目约定好的目录结构:

1
2
3
4
5
6
7
8
9
10
src
main
Java
package 放置主代码
           resources

test
Java
package 放置测试代码

resources

这里解释一下以上文件夹

src/main/java
该文件夹是存放java源码的,发布项目时会将该文件夹下的class文件复制到WEB-INF/classes目录下

src/main/resources
该文件夹一般放置配置文件,如xml,properties文件等,其实也可以放置java文件,只是一种约定罢了,发布项目时该文件夹的文件也会复制到WEB-INF/class中

test中放置测试代码

pom.xml

常用标签概览:

pom.xml是maven项目的核心管理文件,用于项目描述、组织管理、依赖管理、构建管理,其中包含了很多标签。首先概览一下pom.xml中的标签:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<project>
<modelVersion>4.0.0</modelVersion>
<!--maven2.0必须是这样写,现在是maven2唯一支持的版本-->
<!-- 基础设置 -->

<modelVersion>4.0.0</modelVersion> 指定了当前pom的版本
<groupId>cn.itcast.hadoop.mr</groupId> 用来指定当前的maven属于哪个实际的项目
<artifactId>datacount</artifactId>
<version>0.0.1-SNAPSHOT</version> 当前项目的版本号
<packaging></packaging> 打包方式,默认是jar
<name></name>项目描述名
<url></url>项目的地址
<description></description>项目描述
<name>...</name>

<dependencies>...</dependencies> 项目的依赖
<parent>...</parent> 被继承的父项目的构件
<dependencyManagement>...</dependencyManagement> 缺省的依赖信息将会从这个元素中继承
<modules>...</modules> 模块(有时称作子项目) 被构建成项目的一部分。列出的每个模块元素是指向该模块的目录的相对路径
<properties>...</properties> 以值替代名称,Properties可以在整个POM中使用,也可以作为触发条件

Maven的依赖

在pom.xml中,使用如下标签配置依赖:

1
2
3
4
5
6
7
8
<dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${springframework.version}</version>
<type>jar</type>
<scope>compile</scope>
</dependency>

1
2
3
4
5
6
7
groupId,必选,实际隶属项目
artifactId,必选,其中的模块
version必选,版本号
type可选,依赖类型,默认jar
scope可选,依赖范围,默认compile
optional可选,标记依赖是否可选,默认false
exclusion可选,排除传递依赖性,默认空

其中scope有六个值:

  1. compile:默认的范围,编译测试运行都有效
  2. provided:在编译测试时有效,在运行时没有效
  3. test:只在测试时有效
  4. runtime:在测试和运行时有效
  5. system:与本机系统相关联,可移植性差
  6. import:导入的范围,它只使用在dependencyManagement中,表示从其它的pom中导入dependency的配置。

依赖具有传递性,如果想取消传递依赖,可以进行依赖排除,使用exclusion标签。

1
2
3
4
5
6
7
8
9
10
11
<dependency>  
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.1</version>
<exclusions>
<exclusion>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
</exclusion>
</exclusions>
</dependency>

当依赖有冲突时会采用以下原则:
1、短路优先,优先解析路径短的,
2、先声明先优先,如果路径相同,谁先声明先解析谁。

Maven的聚合和继承

聚合

为了能够使用一条命令就能构建m1和m2两个模块,我们需要建立一个额外的名为m的模块,然后通过该模块构建整个项目的所有模块。m本身也是个Maven项目,它的POM如下:

1
2
3
4
5
6
7
8
9
10
11
12
<project>  
<modelVersion>4.0.0</modelVersion>
<groupId>com.zju.test</groupId>
<artifactId>m</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging> pom </packaging>
<name>Account Aggregator</name>
<modules>
<module>m1</module>
<module>m2</module>
</modules>
</project>

继承

可声明父POM供子POM继承
父模块POM如下:

1
2
3
4
5
6
7
8
<project>  
<modelVersion>4.0.0</modelVersion>
<groupId>com.zju.test</groupId>
<artifactId> m-parent </artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name> M Parent</name>
</project>

子模块声明继承如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<project>  
<modelVersion>4.0.0</modelVersion>

< parent >
<groupId>com.zju.test</groupId>
<artifactId> m-parent </artifactId>
<version>1.0.0-SNAPSHOT</version>
< relativePath >../m-parent/pom.xml</ relativePath>
</ parent >

<artifactId> m-child </artifactId>
<name>m child</name>
...
</project>

最后,同样还需要把m-parent加入到聚合模块m中。聚合的POM如下:

1
2
3
4
5
6
7
8
9
10
11
12
<project>  
<modelVersion>4.0.0</modelVersion>
<groupId>com.zju.test</groupId>
<artifactId>m</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging> pom </packaging>
<name>M</name>
<modules>
<module>m-child</module>
<module>m-parent</module>
</modules>
</project>

注意:

  1. 子模块没有声明groupId和version, 这两个属性继承至父模块。但如果子模块有不同与父模块的 groupId、version ,也可指定;
  2. 不应该继承artifactId,如果groupId ,version,artifactId 完全继承的话会造成坐标冲突;另外即使使用不同的 groupId或version,同样的 artifactId也容易产生混淆。
  3. 使用继承后 parent也必须像自模块一样加入到聚合模块中。也就是在在聚合模块的 pom中加入m-parent

    Maven插件

    未完待续…
1 0