maven介绍及环境搭建 Maven 是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具 Maven官网:http://maven.apache.org/ Maven目录结构: 1.bin目录是包含mvn的运行脚本 2.boot目录包含一个类加载器的框架,maven使用它加载自己的类库 3.conf配置文件 4.lib包含maven运行时的依赖类库 配置环境变量: maven环境配置,增加一个环境变量Maven_HOME,值是maven的解压目录 编辑Path变量在最后面添加 ;%Maven_HOME%\bin 在dos界面输入mvn -v 检测maven环境变量是否配好 mvn项目文件夹结构 -src -> 源代码目录 -main -java -package -test -java -package -resources 与src同级目录下会生成target文件夹,classes里面有编译好的class文件,reports为生成的测试报告。 pom.xml结构 <groupId> 是项目的包名 <artifactId> 是模块名 <version> 当前项目的版本号version的值固定的是 0.0.1SNAPSHOT <dependencies> 依赖哪些包 <dependency>依赖的包 <groupId>包名 <artifactId>模块名 <version>包版本 pom.xml保存在项目根目录 命令: 编译:mvn compile 运行测试:mvn test 打包项目jar:mvn package maven常用的构建命令 mvn -v 查看maven版本 compile 编译项目 test 测试项目 package 打包项目 clean 删除 target install 安装jar包到本地仓库中 maven自动建立目录骨架 创建目录的两种方式: 1;mvn archetype:generate 按照提示进行选择 2:mvn archetype: -DgroupId=组织名,公司网址的反写+项目名 -DartifactId=项目名-模块名 -Dversion=版本号 -Dpackage=代码所在的包名 maven中的坐标和仓库 坐标 构件 仓库 本地仓库和远程仓库 镜像仓库Maven下的settings.xml 里mirrors 更改仓库位置Maven下的settings里localRepository 本地仓库和远程仓库 * 如果maven引用了其他项目的包 * maven会先在pom.xml中进行查找,找到相应的“坐标”位置 * 然后去本地maven仓库中查找这个位置下的包 * 如果在本地maven仓库中找不到这个包,maven会去网络上的中央仓库中寻找这个包 镜像仓库 * 国内有与国外中央仓库一样的地址 完整的项目构建过程包括: 清理、编译、测试、打包、集成测试、验证、部署 maven的生命周期和插件 maven生命周期: clean 清理项目 default 构建项目 site 生成项目站点 clean 清理项目 pre-clean 执行清理前的工作 clean清理上一次构建生成的所有文件 post-clean执行清理后的文件 default 构建项目(核心) compile test package install site 生成项目站点 pre-site在生成项目站点前要完成的工作 site生成项目的站点文档 post-site在生成项目站点后要完成的工作 site-deploy发布生成的站点到服务器上 maven中Pom.xml解析 maven的pom.xml各标签所代表的内容: dependencies:依赖列表 dependency:依赖项 scope:依赖范围 build:配置 plugins:插件列表 artifactId:项目名+模块名 version:一般由三个数字组成 第一个0表示大版本号;第二个0表示分支版本号;第三个0表示小版本号 snapshot快照版本 alpha内部测试 beta公测 release稳定 GA正式发布 packaging:打包格式,默认是jar,也可以是war,zip,pom等 name:项目描述名 url:项目地址 description:项目描述 developers:开发人员列表 license:许可证信息 organization:组织信息 parent: 用于子模块中对于父模块的继承 modules: 指定多个模块,然后一起编译 <name>项目的描述名</name> <url>项目的地址</url> <description>项目描述</description> <developers>开发人员信息</developers> <licenses>许可证信息</licenses> <!-- 依赖列表 --> <dependencies> <!-- 依赖项 --> <dependency> <groupId></groupId> <artifactId></artifactId> <version></version> <type></type> <scope>依赖的范围</scope> <optional>设置依赖是否可选,默认是false</optional> <!-- 排除依赖传递列表 --> <exclusions> <exclusion></exclusion> </exclusions> </dependency> </dependencies> <!-- 依赖的管理,一般定义在父模块中,由子模块去继承 --> <dependencyManagement> <dependencies> <dependency></dependency> </dependencies> </dependencyManagement> <!-- 对构建行为提供相应的支持 --> <build> <!-- 插件列表 --> <plugins> <plugin> <!-- 指定坐标 --> <groupId></groupId> <artifactId></artifactId> <version></version> </plugin> </plugins> </build> <!-- 一般在子模块中指定所继承的父模块 --> <parent></parent> <!-- 模块列表 --> <modules> <module></module> </modules> maven依赖范围 scope---依赖范围 compile:默认的范围,编译、测试以及运行阶段都有效 provided:在编译和测试时有效 runtime:在测试和运行时有效 test:只在测试范围有效 system:依赖范围和provided类似,但与本机系统相关联,可移植性差 import:导入的范围,它只使用在dependencyManagement中, 表示从其他的pom中导入dependency的配置 maven依赖传递 假设B项目依赖A项目,C项目又依赖B项目,那么在C项目中运行compile时,在引进B项目的同时,自动就把A项目也引进来了。 如果不想将A项目导入的话,可以使用exclusions下设置exclusion,然后将A项目的坐标添加即可。 maven依赖冲突 针对依赖冲突: 短路优先 声明优先 1.短路优先:谁路径最短、最快,用谁的 2.声明优先: 如果路径相同,谁先声明的, 用谁的 maven聚合和继承 聚合:如果项目D依赖项目C,项目C依赖项目B,项目B依赖项目A,我们需要一个个安装这项项目,在Maven中有一种方式可以将多个项目一次性安装,这就是聚合的概念。简单讲就是,需要人工多次操作的,只要Maven能理解,一次性告诉他,他就能帮我们做这件单调烦人的事情了。——使用<modules></modules>这个标签。 <modules> <module>../hongxin-bege</module> <module>../hongxin-nange</module> <module>../hongxin-shanji</module> </modules> 继承:多次使用到的依赖,比如:单元测试,没有必要在所有的项目中都引用一下,此时就可以采用继承的方式来实现,先来一个父级的POM.XML然后再继承此POM.XML。 1. packaging 改为pom。 2. dependencyManagement 中并不提取依赖,只进行统一管理。 3. property中定义了junit版本号,之后可以引用。 4. 父类parent中的main和test没有意义,可以删除。 父类pom: <dependencyManagement> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> </dependency> </dependencies> </dependencyManagement> 子类pom: <parent> <groupId>com.hongxin</groupId> <artifactId>hongxin-parent</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> </dependencies> 创建好的web项目目录,其中的jsp报错,是因为没有添加servlet API的原因,需要在pom中添加相关依赖。 |