Maven学习笔记-01-Maven入门
一 Maven的基本概念
Maven(翻译为"专家","内行")是跨平台的项目管理工具。主要服务于基于Java平台的项目构建,依赖管理和项目信息管理。
1 项目构建
项目构建过程包括【清理项目】->【编译项目】->【测试项目】->【生成测试报告】->【打包项目】->【部署项目】这几个步骤,这六个步骤就是一个项目的完整构建过程。
2 依赖管理
依赖指的是jar包之间的相互依赖,比如搭建一个Struts2的开发框架时,光有struts2-core-2.3.16.3.jar这个jar包是不行的,struts2-core-2.3.16.3.jar还依赖其它的jar包,依赖管理指的就是使用Maven来管理项目中使用到的jar包,Maven管理的方式就是“自动下载项目所需要的jar包,统一管理jar包之间的依赖关系”。
3 使用Maven的好处
Maven的好处: 约定优于配置(Convention Over Configuration)
Maven中使用约定,约定java源代码代码必须放在哪个目录下,编译好的java代码又必须放到哪个目录下,这些目录都有明确的约定。Maven的每一个动作都拥有一个生命周期,例如执行 mvn install 就可以自动执行编译,测试,打包等构建过程只需要定义一个pom.xml,然后把源码放到默认的目录,Maven帮我们处理其他事情使用Maven可以进行项目高度自动化构建,依赖管理(这是使用Maven最大的好处),仓库管理。
二 Maven下载
下载地址:http://maven.apache.org/download.cgi
下载完成后,得到一个压缩包,解压后可以看到maven的组成目录
Maven目录分析
- bin:含有mvn运行的脚本
- boot:含有plexus-classworlds类加载器框架
- conf:含有settings.xml配置文件
- lib:含有Maven运行时所需要的java类库
- LICENSE.txt, NOTICE.txt, README.txt针对Maven版本,第三方软件等简要介绍
三 Maven安装
Maven 下载是以最新的Maven版本为例
1 首先要确保电脑上已经安装了JDK(要jdk 1.6+的版本),配置好JDK的环境变量,使用如下的两个命令检查检查JDK安装的情况。(如果没有安装JDK,请参照JavaWeb学习总结-01 JavaWeb开发入门)
echo %JAVA_HOME% java -version
2 对apache-maven-3.3.9.zip进行解压缩
对apache-maven-3.3.9.zip进行解压缩,解压缩到的目录不要有中文。比如解压缩到 d:/installed_software 目录下。
3 设置系统环境变量: M2_HOME
注意: 配置是以LZ的开发环境为例,与上面的下载的Maven最新版会有所出入。
4 设置环境变量Path,将%M2_HOME%\bin加入Path中,一定要注意要用分号;与其他值隔开,如下图所示:
5 查看 maven版本,输入以下命令
mvn -version
如果控制台提示:mvn不是内部或外部命令,也不是可运行的程序或批处理文件,需要在在Path中添加:
%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;
然后重新启动cmd控制台可以正常打印出maven版本
四 Maven的简单使用
4.1、Maven项目的目录约定MavenProjectRoot(项目根目录)
|----src
| |----main
| | |----java ——存放项目的.java文件
| | |----resources ——存放项目资源文件,如spring, hibernate配置文件
| |----test
| | |----java ——存放所有测试.java文件,如JUnit测试类
| | |----resources ——存放项目资源文件,如spring, hibernate配置文件
|----target ——项目输出位置
|----pom.xml ----用于标识该项目是一个Maven项目
4.2 使用Eclipse创建简单Maven项目
Eclipse -> File -> New -> Maven Project -> 选择 Maven的模板类型为 “Maven-archetype-quickstart”
Group Id : com.test
Artifact Id : Testmaven
GroupId代表公司名称,ArtifactId代表项目名称。
pom.xml文件中的内容如下:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion></modelVersion> <groupId>com.test</groupId> <artifactId>TestMaven</artifactId> <version>-SNAPSHOT</version> <packaging>jar</packaging> <name>TestMaven</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version></version> </dependency> </dependencies> </project>
4.3 编写测试类
Test.java
package com.test.TestMaven; public class Test { public static void main(String[] args) { System.out.println("hello maven !"); } }
4.4 使用maven命令编译JAVA文件
进入工程根目录,然后使用 "mvn compile" 命令进行编译。
使用Maven编译完成之后,在项目根目录下会生成一个target文件夹
打开target文件夹,可以看到里面有一个classes文件夹,classes文件夹存放的就是编译成功后生成的.class文件
4.5 使用"mvn clean"命令清除编译结果,也就是把编译生成的target文件夹删掉
执行完"mvn clean"命令后,target文件夹就会被删除了。
4.6 常用Maven命令总结
编译源代码: mvn compile 运行测试:mvn test 打包:mvn package 清除产生的项目:mvn clean
五 修改从Maven中心仓库下载到本地的jar包的默认存储位置
从Maven中心仓库下载到本地的jar包的默认存放在”${user.home}/.m2/repository”中,${user.home}表示当前登录系统的用户目录(如"C:\Users\gacl"),如下图所示
Jar包存放在这个位置不太好,希望能够自己定义下载下来的jar包的存放位置,可以自己设置下载到本地时的jar包的存放目录。在“D:\”目录下创建一个“maven_jar”文件夹
找到apache-maven \conf目录下的settings.xml文件
加上下面的代码:
<localRepository>D:/maven_jar</localRepository>
这样就可以把jar包下载到我们指定的D:/maven_jar目录中了.把jar包下载到本地的好处就是: 当编译时,会优先从本地的jar包去找,如果本地存在,就直接拿来用,如果不存在,就从Maven的中心仓库去下载.
第一次执行"mvn compile"和"mvn clean"这两个命令时,Maven会去中央仓库下载需要的jar包,而第二次执行这两个命令时,由于所需的jar包已经在本地的仓库中存储,所以就可以直接拿来用了,这样就省去了去中央仓库下载jar包的时间。
六 Maven异常处理
在导入一个Maven项目之后发现有一个如下的错误:
Project configuration is not up-to-date with pom.xml. Run project configuration update
解决办法1:
在项目上右键 ->【Maven】->【Update Project 】
解决办法2:
在Window -> Prefrence中打开Problems 视图,在Problems中右击相关的Errors,并点击Quick Fix后即可fix。
解决办法3:
Eclipse -> Project -> Clean | Clean projects selected below,选中要编译的eclipse工程,然后点击ok按钮进行编译。
在命令行输入 mvn package,对项目进行打包操作。
七 maven依赖关系中Scope的作用
<dependency>中还引入了<scope>,它主要管理依赖的部署。目前<scope>可以使用5个值:
- compile,缺省值,适用于所有阶段,会随着项目一起发布。
- provided,类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet.jar。
- runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。
- test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。
- system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。
八 pom.xml文件中的groupId和artifactId到底该怎么定义?
有如下地址可以查询,输入jar包的基本名称就可以查询到配置方法。
http://mvnrepository.com/
参考资料:
https://my.oschina.net/zh119893/blog/276090
http://www.cnblogs.com/fnng/archive/2011/12/02/2272610.html
http://blog.csdn.net/wfp458113181wfp/article/details/26366397
Maven学习笔记-01-Maven入门的更多相关文章
- MAVEN学习笔记之Maven插件的应用(4)
MAVEN学习笔记之Maven插件的应用(4) <build> <pluginManagement> <plugins> <plugin> <gr ...
- MAVEN学习笔记之Maven生命周期和插件简介(3)
MAVEN学习笔记之Maven生命周期和插件简介(3) clean compile site三套生命周期相互独立. clean pre-clean 执行清理前的工作 clean 清理上一次构建生成的所 ...
- Maven学习笔记:Maven简介
Maven的概念 Maven是基于项目对象模型(POM,Project Object Model),可以通过描述信息来管理项目的构建,报告和文档的软件管理工具 Maven除了以程序构建能力为特色之外, ...
- java学习笔记-01.对象入门
1.面向对象编程简称是OOP. 2.继承是通过 extends关键字实现的,接口是通过implements关键字实现的. 3.public:意味着后续的定义任何人均可使用. private:意味着除了 ...
- MongoDB学习笔记01:入门
MongoDB简介 MongoDB是一个开源.高性能.无模式的文档型数据库,当初的设计就是用于简化开发和方便扩展,是NoSQL数据库产品中的一种.是最 像关系型数据库(MySQL)的非关系型数据库. ...
- Maven学习笔记-03-Eclipse下maven项目在Tomcat7和Jetty6中部署调试
现在最新的Eclipse Luna Release 已经内置了Maven插件,这让我们的工作简洁了不少,只要把项目直接导入就可以,不用考虑插件什么的问题,但是导入之后的项目既可以部署在Tomcat也可 ...
- Maven学习笔记-04-Eclipse下maven项目在Tomcat7和Jetty6中部署调试
现在最新的Eclipse Luna Release 已经内置了Maven插件,这让我们的工作简洁了不少,只要把项目直接导入就可以,不用考虑插件什么的问题,但是导入之后的项目既可以部署在Tomcat也可 ...
- Maven学习笔记—仓库
Maven仓库 1 什么是Maven仓库 在Maven中,任何一个依赖.插件或者项目构建的输出,都可以成为构件,而Maven通常在某个位置统一的存储所有Maven项目共享的构件,这个统一的位置就是Ma ...
- MAVEN学习笔记之私服Nexus(2)
MAVEN学习笔记之私服Nexus(2) 私有服务器搭建 Nexus www.snatype.org下载 snatype-work 是默认nexus存储nexus a:将bin添加到环境中 Admin ...
- MAVEN学习笔记之基础(1)
MAVEN学习笔记之基础(1) 0.0 maven文件结构 pom.xml src main java package resource test java package resource targ ...
随机推荐
- 全面理解HTTP
URL与URI 我们经常接触到的就是URL了,它就是我们访问web的一个字符串地址,那么URI是什么呢?他们是什么关系呢? URL:uniform resource location 统一资源定位符U ...
- python数字图像处理(7):图像的形变与缩放
图像的形变与缩放,使用的是skimage的transform模块,函数比较多,功能齐全. 1.改变图片尺寸resize 函数格式为: skimage.transform.resize(image, o ...
- Tomcat7.x 与 Tomcat6.x
试用 Tomcat7.x 与 Tomcat6.x 的明显不同 + Context 填写方法 + 默认应用配置方法 标签: tomcat数据库驱动程序数据库虚拟机jdbcjavascript 2012- ...
- 接收content-type:multipart/form-data类型的参数
一.问题描述 最近在写接口程序,该接口需要与其他公司的程序对接.对方发送content-type:multipart/form-data类型的参数,结果通过request.getParameter(p ...
- error C2065: “IDD_DIALOG1” : 未声明的标识符
编译时提示error C2065: “IDD_DIALOG1” : 未声明的标识符 错误的可能原因及解决方法如下: 1.出错文件中没有包含资源文件ID声明的resource.h文件.在出错文件中加入# ...
- 父div高度和宽度的应用
这是我自己在仿腾讯首页时遇到的布局问题,在此记录,如果有错,欢迎指正. 首先是对齐问题,可以把父div的高度设置为0,然后调整padding值,这样可以批量调整子div们和其他父div的相对高度. 这 ...
- JavaScript基础2---控制权DOM操作
文档对象模型DOM(Document Object Model)定义访问和处理HTML文档的标准方法.DOM将HTML文档呈现为带有元素,属性和文本的树结构(节点树). HTML文档可以说由节点构成的 ...
- Object C学习笔记22-#define 用法
上一篇讲到了typedef 关键字的使用,可以参考文章 Object C 学习笔记--typedef用法 .而在c中还有另外一个很重要的关键字#define. 一. #define 简介 在C中利用预 ...
- 初探JAVA中I/O流(一)
一.流 流,这里是对数据交换的形象称法.进程是运行在内存中的,在运行的过程中避免不了会与外界进行数据交互.比如将数据从硬盘.控制台.管道甚至是套接字(具体点应该是我们电脑上的网卡)读到我们进程锁所占据 ...
- 08.C# System.Nulable<T>和空引用操作符(四章4.2-4.4)
看了这3小节,发现作者讲得太详细了,把一个都在正常使用的用法说得太神密了,搞得不知是自己不懂作者的苦心,还是作者用意为之,这里给大家都简单讲下吧,太深的真心讲不下去. 1.可空类型的核心部分是Syst ...