maven学习笔记

来源:互联网 发布:淘宝论坛 编辑:程序博客网 时间:2024/05/15 00:25
maven1.maven项目目录结构:src    -main        -java            -package    -test        -java            -package    resourcessrc 源代码目录resources 存放资源文件2.pom.xml结构  <modelVersion> 是maven的版本  <groupId> 是项目的包名  <artifactId> 是模块名  <version> 当前项目的版本号  <dependencies> 依赖哪些包    <dependency>依赖的包      <groupId>包名      <artifactId>模块名      <version>包版本pom.xml保存在项目根目录,然后打开命令行去到项目所在根目录执行mvn compile命令,进行编译。mvn test命令可以测试是否部署成功mvn package打包当前项目jar3.mvn compile 编译  mvn test 运行test包下面的代码  生成target文件夹 其中classes中为编译后的字节码文件mvn package 给整个项目打包,在target目录下生成jar文件(文件类型可用pom中的packaging标签自己定义4.测试类:import org.junit.*;@Test5.maven 的常用的构建命令mvn -v    用来查询maven的版本号、java的版本号以及系统的版本号mvn compile    用来编译当前目录下的项目(将会去pom中查找依赖,若没有,会联网到中央库搜索),BUILD SUCCESS 代表成功mvn tset    运行测试类mvn package    在target目录下,生成当前项目的Jar包(打包)mvn clean    清理项目,执行此命令将会删除target目录mvn install    将当前目录下所在的项目安装到本地仓库中,可以供其他Maven项目依赖使用    (要在使用该maven项目的其他maven项目的pom.xml文件中配置引用该项目,    将该maven项目中的下面三个配置复制到其他maven项目中供其他项目当做jar引用他     <groupId> 是项目的包名 <artifactId> 是模块名 <version> 当前项目的版本号)6.自动创建目录骨架的两种方式1.mvn archetype:generate 根据提示分步创建2.mvn archetype generate -DgroupId=组织名,公司网址的反写+项目名                           -DartifactId=项目名-模块名                         -Dversion=版本号                         -Dpackage=代码所存在的包名7.maven中的坐标和仓库坐标:<groupId> 是项目的包名     <artifactId> 是模块名     <version> 当前项目的版本号groupId , artifactId , version 确定地址。仓库:本地仓库和远程仓库镜像仓库:1>. 更改本地仓库位置 : settings.xml中添加localRepository标签2>. 组合命令: mvn clean compile3>. settings.xml中配置mirror repositories,但是注意一旦配置了mirror,maven就会默认从mirror仓库取包而远程主仓库就不可使用8.在eclipse中安装maven插件以及创建maven项目:①在eclipse4.0及MyEclipse中就不需要安装maven插件,在window--preference中可以查看是否有maven插件, 没有的话就需要安装Maven插件,直接复制Maven插件到eclipse安装目录中的dropins中,然后修改eclipse.ini, 在这个文件里的512m后面添加-vm,换行,再添加jdk/bin/javaw.exe保存。②eclipse是默认运行在jre之上的而maven需要jdk的支持,需要tools.jar在jdk/lib目录中,所以修 改eclipse的JRE,java---Installed JREs--ADD--Next--把本地JDK的目录放到JRE home中,并设 置Dmaven.multiModuleProjectDirectory=$M2_HOME--最后勾选JDK③更改maven本地的配置Installactions---ADD---把本地的maven目录放进去④修改setting的路径会出现的问题:1、如果版本不匹配 则mvn -v查看maven的jdk版本,然后在eclipse中配置当前使用的jdk2、run as-->Maven build...-->在goals中compile(可以在此处使用其他的命令,如:package)---》run若报-Dmaven.multiModuleProjectDirectory错误,则在选项-->java--》installed JRES 中设置jdk的参数,添加上“-Dmaven.multiModuleProjectDirectory=$M2_HOME”9.完整的项目构建过程包括:clean、compile、test、package、validate、install清理、编译、测试、打包、集成测试、验证、部署注:运行package命令时,compile以及test会自动运行maven相互独立的三个生命周期:1.clean      清理项目    1> pre-clean  执行清理前的工作    2> clean      清理上一次构建生成的所有文件    3> post-clean 执行清理后的文件2.default    构建项目(最核心)    compile  test  package  install3.site       生成项目站点(根据pom中的信息自动生成站点)    pre-site      生成站点前的工作    site          生成项目的站点文档    post-site     生成站点后的工作    site-deploy   发布生成的站点到服务器上10.maven中pom.xml解析pom.xml文件是maven核心管理文件,用于项目描述,组织管理,依赖管理和构建信息的管理maven的pom.xml各标签所代表的内容:<modelVersion>  : 制定了当前pom的版本号(固定且必须)<project>: 根标签,约束信息<modelVersion>: 指定当前pom的版本,必须元素<groupId>: 反写的公司网址+项目名<artifactId>: 项目名+模块名<version>: 0.0.0snapshot第一个0: 表示大版本号第二个0 : 表示分支版本号第三个0: 表示小版本号snapshop: 快照alpha: 内部测试beta: 公测Release: 稳定GA: 正式发布<packaging>: 打包方式,默认为jar(war zip pom)<name>: 项目描述名<url>: 项目地址<description>: 项目描述<developers>: <licenses>: 许可信息<organization>:<dependencies>: 依赖列表<dependency><groupId>:<artifactId>:<version>:<type>:<scope>: 依赖范围<optional>: 设置依赖是否可选(true/false)<exclusions>: 排除依赖传递列表<exclusion><dependencyManage>: 依赖的管理<dependencies><dependency><build><plugins>: 插件列表<groupId><artifactId><version><parent>: 用于子模块中对于父模块的继承<modules>: 指定多个模块,然后一起编译11.scope 作用域的值:compile :默认,编译,测试,运行均有效;provided: 编译,测试; 如:servlet API加载runtime: 测试,运行,如:jdbc驱动;import:导入的范围有效,它只使用在dependencyManagement中,表示从其他的pom中导入dependency的配置test: 测试(junit的<scope>test</scope>标签表示junit只存在测试的classpath中)system:与本机系统相关联,换机子以后可能会出问题,可移植性差(编译、测试时有效)12.依赖的传递性clean 清除 package 打包 install 安装带本地仓库 compile 编译依赖的传递性:需要将父类pom  install到本地仓库中,子类pom在<dependency>中加入父类依赖坐标,即可调用在<dependency>中运用<exclusions> <exclusion>来排除所不需要的父类pom13.依赖冲突时的优先顺序:1>.短路优先  有以下两条依赖:A->B->C->X(JAR)和A->D->X(JAR),那么A-D-X这条优先解析2>.先声明先优先  如果路径长度相同,则谁先声明(在pom中出现的先后顺序),先解析谁14.继承和聚合继承:多次使用到的依赖,比如:单元测试,没有必要在所有的项目中都引用一下,此时就可以采用继承的方式来实现,先来一个父级的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>聚合:如果项目D依赖项目C,项目C依赖项目B,项目B依赖项目A,我们需要一个个安装这项项目,在Maven中有一种方式可以将多个项目一次性安装,这就是聚合的概念。简单讲就是,需要人工多次操作的,只要Maven能理解,一次性告诉他,他就能帮我们做这件单调烦人的事情了。——使用<modules></modules>这个标签。<modules>   <module>../hongxin-bege</module>   <module>../hongxin-nange</module>   <module>../hongxin-shanji</module></modules>