Maven笔记

学习慕课网Maven视频摘抄的笔记:


比较官方的定义:Maven是基于项目对象模型(POM),通过一小段信息来管理项目的构建、报告和文档的软件项目管理工具。


作用:Maven可以帮助我们更有效的管理项目,也是强大的自动化构建工具,覆盖了编译,测试,运行,清理(没听清),打包,部署,整个项目构建的周期,提供了一个仓库的概念,统一管理项目依赖的第三方jar包。最大可能的避免因环境配置不同,不同地方不能运行。
目录结构:
boot目录包含一个类加载器框架
  |-Maven使用它加载自己的类库
bin目录包含mvn的运行脚本
|-在cmd中输入mvn就会调用这些脚本
    confing目录包含配置文件
    lib目录包含mvn平时使用的所有类库,除了自身的,还有第三方的依赖的类库

配置环境变量:
环境变量分为用户变量和系统变量
如果电脑是多人使用,为了不影响别人,就在用户变量设置。
如果是私人的话,就无所谓了。
   新建一个变量 name: M2_HOME   value:maven的安装目录
   path 添加 ;%M2_HOME%\bin
maven项目的目录结构:
src
	-main
		-java
			-package(自定义的包)
	-test
		-java
			-package
	-resources(存放一些资源文件)
	
POM文件

<groupId>com.fezi.maven</groupId>
<artifactId>maven01-model</artifactId>
<version>0.0.1-SNAPSHOT</version>

groupId的值就是项目的包名

artifactId的值就是模块名,这里一般建议使用项目名

version的值是版本名   一般是快照

运行cmd:

切换盘符:
e:
cd E:\Learing_Test\test_maven\maven01
输入mvn compile 对项目进行编译:

mvn compile
编译完成后会自动生成target文件夹(.class文件及报告)
运行测试用例:
mvn test

打出错误信息的堆栈记录:
mvn -e test

项目打包:
mvn package

maven常用命令:
mvn -v     查看maven版本
mvn test   测试
mvn package  打包
mvn compile  编译
mvn clean 删除target目录
mvn install 安装jar包到本地仓库
               从运行日志来看,mvn install 做了以下几步操作;
                  (1) 编译代码
                  (2) 执行测试
                 (3) 打包
                 (4) 安装到本地maven仓库
1.创建一个maven工程 maven01,然后编译发布
2创建一个maven工程 maven02,然后在maven02作用引用maven01
3.在编译maven02时会报错,提示找不到相关的class文件,
此时把maven01进行打包安装,执行mvn install 把maven01打包安装到本地的maven仓库里面,
4.在maven02的pom文件里增加依赖
<dependency>
	<groupId>com.imooc.maveno1</groupId>
	<artifactId>maven01-model</artifactId>
	<version>0.0.1SANPSHOT</version>
</dependency>
然后可以正常编译maven02了
自动创建骨架:
maven创建目录的两种方式
1.archetype:generate 按照提示进行选择
2.archetype:generate -DgourpId=组织名,公司网址的反写+项目名称
-DartifactId=项目名-模块名
-Dversion=版本号
-Dpackage=代码所在的包名
实例
mvn archetype:generate -DgroupId=com.imooc.maven04 -DartifactId=maven04-demo -Dversion=1.0.0-SNAPSHOT -Dpackage=com.imooc.maven04-demo
坐标和仓库:
1、坐标(构件通过坐标作为其唯一标识)
groupId、artifactId、version
2、仓库:
本地仓库
远程仓库(全球中央仓库https://repo.maven.apache.org/maven2)
镜像仓库(中央仓库在国外有可能访问不了,用国内镜像仓库代替,需要修改配置才能使用镜像仓库)
/conf/setting.xml镜像仓库配置:
<mirror>
<id>maven.net.cn</id>
<mirror>
      <id>alimaven</id>
      <mirrorOf>central</mirrorOf>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>阿里云的镜像
</mirror>
3、修改本地仓库的位置
<localRepository>...</localRepository>
Ps:一旦配置了镜像仓库,那么先前的所有配置都会转到镜像仓库中。
 默认仓库位置.m2 repository,将settings.xml复制到更改后的本地仓库中,这样下载新版本maven时,也不用修改settings.xml了
关于setting.xml的详解  http://www.cnblogs.com/jingmoxukong/p/6050172.html

在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中配置当前使用的jdk
2、run as-->Maven build...-->在goals中compile(可以在此处使用其他的命令,如:package)---》run
若报-Dmaven.multiModuleProjectDirectory错误,则在选项-->java--》installed JRES 中设置jdk的参数,
添加上“-Dmaven.multiModuleProjectDirectory=$M2_HOME”

maven生命周期:
	clean:清理项目
		- pre-clean :执行清理前的工作
		- clean:清理上一次构建生成的所有文件
		- post-clean:执行清理后的文件
	default:构建项目
		- compile test package install
	site:生成项目站点
		- pre-site 在生成项目站点之前要完成的工作
		- site 生成项目的站点文档
		- post-site在生成项目站点后要完成的工作
		- site-deploy发布生成的站点到服务器上
		
	
http://maven.apache.org/plugins/index.html
例如:source插件,打包
<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-source-plugin</artifactId>
	<version>2.4</version>
	<executions>
		<execution>
			<phase>package</phase> <!--绑定到的目标阶段-->
			<goals>
				<goal>jar-no-fork</goal> <!--目标方式,无分支-->
			</goals>
		</execution>
	</executions>
	<configuration>
		<outputDirectory>/absolute/path/to/the/output/directory</outputDirectory> <!--输出路径-->
		<finalName>filename-of-generated-jar-file</finalName>
		<attach>false</attach>
	</configuration>
</plugin>


pom.xml常用元素

 modelVersion  指定了当前pom版本
 groupId    反写的公司网址+项目名
artifactId  项目名+模块名
version     版本号  第一个0表示大版本号,第二个0表示大版本号,第三个0表示大版本号 0.0.1snapshot快照
packaging   打包方式 默认是jar

name       项目的描述名
url       项目的地址
description  项目描述
developers   开发人员信息
licenses    许可证信息
 
dependencies 
dependency
scope    依赖范围
optional  设置依赖是否可选
exclusion   

dependencyManagement   依赖管理  不会被运行
build   
     plugins  插件列表(指出坐标)
     parent    对父模块的继承
modules   定义多个模块  一起进行编译

maven依赖范围:
compile:默认的范围,编译测试运行都有效
provided:编译和测试有效
runtime:测试和运行的时候有效
test:只在测试时有效
system:与本机系统相关联
import:导入的范围,它只使用在dependencyManagement中,表示从其他的pom导入dependency的配置
Maven传递依赖:
要点1:install指令能把项目打包到本地仓库,运行install指令,同时还运行了package打包。
编译一个项目,如果存在依赖,首先会在本地仓库查找,如果没找到,直接到中央仓库查找,如果还是没找到,则报错。所以编译一个存在本地依赖的项目,本地依赖一定要运行install指令,把依赖的项目打包到本地仓库。
要点2: 如果想排除某个依赖的项目,则需要在pom.xml添加exclusions标签,添加到已经添加了排除依赖的依赖里,把需要排除的依赖的坐标引进来。
要点3:setting.xml中大概182行位置,可以制定jdk版本



Maven依赖冲突(依赖的构建有多种版本存在):
不同版本的构件
1.短路优先
2.先声明先优先:如果路径长度相同,则谁先声明,先解析谁

聚合与继承:
聚合(将多个模块聚合)
1.创建聚合项目 proj-aggreation
2.packaging为pom
3.使用modules定义要聚合的模块
<modules>
<module>../proj-m1</module>
<module>../proj-m2</module>
</modules>
继承
1.应用场景:组件聚合时,多个组件使用相同的依赖导致聚合后出现重复,使用一个父组件定义该依赖,然后有需要的组件继承该组件,聚合时就不会重复
2.父组件定义依赖
在父组件-->dependencyManager-->dependencies下定义dependency
注意,dependencyManager下定义的dependency,该组件不依赖
3.继承父组件
parent标签下引用父组件的坐标
创建dependency引用,只有groupId和artifactId子元素

使用eclipse构建简单的Maven项目:
1:打开Eclipse
2:创建Maven项目,选择archetype-webapp模板
3:解决Servlet没有生命依赖的问题,在pom.xml中添加servlet的依赖,可以去中央仓库选择servlet版本
例如:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.0-b01</version>
</dependency>
4:手工完善Maven约定好的目录结构
可以在navigator窗口中手动新建
/src/main/java
/src/test/java
5:Project Explorer中更新项目
6:创建项目的输出目录
build path中设置输出路径output folder,确保每个module都输出在../tartet/classes目录中
7:将Maven项目转换为Web项目
右击-属性-project facets-勾选动态模板(Dynamic Web Module)
8:修改部署时配置去掉多余的配置项例如:测试代码
右击-属性-Deployment Assembly-删除多余的配置项(测试代码)
9:使用package命令打包项目—使用jetty这个插件(在Maven的中央插件库中寻找)作为Web容器,在中央仓库查找jetty的plugin坐标配置到pom.xml中
pom.xml例子:
<build>
<finalName>webbproject-demo</finalName>
<plugins>
<plugin>
<groupId>org.mortbay.jetty</groupId> 
<artifactId>jetty-maven-plugin</artifactId> 
<version>2.1.1</version>
<executions>
<execution>
<!-- 在打包成功后使用jetty:run来运行jetty服务 -->
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>










 
 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值