Maven笔记一
简介:什么是maven
Maven是一个跨平台的项目管理工具,主要用于基于java平台的项目构建,依赖管理。
如图为项目构建的过程。
解决的项目的问题:
1、 如果有好几个项目,这好几个项目中,需要用到很多相同的jar包,
能不能只建立一个仓库来解决这个问题?
2、测试方法能不能全部运行呢?
3、怎么样把一个模块的功能放入到仓库中
Maven的安装与配置
2.1 Maven的安装
2.1.1 Jdk的情况
Jdk必须1.6以上的版本
2.1.2 从官网下载maven
从http://maven.apache.org/官网上下载最新版本的maven
2.1.3 设定path路径
把下载下来的maven解压缩,然后有一个bin文件夹,这是一个bin的文件夹的目录
F:\work\course\maven\maven\bin
把该目录追加到环境变量的path中。
2.1.4 利用命令行检查是否成功
有这个图,说明maven安装成功了。
2.2 建库
2.2.1 先打开路径
C:\Users\Think\.m2
2.2.2 把settings.xml文件复制到上述的路径中
F:\work\course\maven\apache-maven-3.0.5-bin\apache-maven-3.0.5\conf
有一个settings.xml文件,复制到C:\Users\Think\.m2
2.2.3 修改settings.xml文件
<localRepository>F:/work/course/maven/mavenRepository/</localRepository>
指定仓库的路径
在这里mavenRepository就是仓库的路径
2.3 Maven的配置
说明:
bin中存放可执行的二进制文件
conf存放settings.xml文件
lib 运行maven所依赖的jar包
2.4 maven的约定
src/main/java 存放项目的java文件
src/main/resources 存放项目的资源文件,如spring,hibernate的配置文件
src/test/java 存放所有的测试的java文件
src/test/resources 存放测试用的资源文件
target 项目输出位置
pom.xml 文件
maven项目
3.1 hello项目
3.1.1 在myeclipse建立一个项目Hello
3.1.2 创建一个包cn.itcast.maven,并在该包下创建一个类
3.1.3 编写Hello类
3.1.4 在src/test/java中创建一个包cn.itcast.maven,创建一个测试类HelloTest
3.1.5 编写测试类
3.1.6 编辑pom.xml文件
说明:
project:表示一个工程
modelVersion:为版本号
3.1.7 用maven命令编译项目(mvn compile)
在命令行出现这样的形式,说明编译OK了。
3.1.8 target文件夹的变化
可以看到编译后的文件全部放入到了target里。
3.1.9 clean
执行命令mvn clean
说明执行成功了。
可以看到target的目录没有了。
3.1.10 test
执行mvn test命令
说明执行成功了,并且运行了一个类,再次看target的结构
说明:
target/classes
存放编译后的类
target/test-classes
存放编译后的测试类
target/surefire-reports
存放测试报告
可以看出,只要进行测试,清理和编译可以自动执行了。
3.1.11 package
执行mvn package
这个界面说明打包成功了。
说明:
target/classes
编译后的类的路径
target/test-classes
编译后的测试类的路径
target/surefire-reports
测试报告
target/maven-archiver
执行package的归档
Hello-0.0.1-SNAPSHOT.jar
执行完package命令后打成的jar包
3.2 Hellofriend项目
3.2.1 建立HelloFriend项目工程
3.2.2 编写pom.xml文件
3.2.3 执行mvn compile命令
执行这个命令的时候会出错,因为HelloFriend项目是建立在Hello项目基础之上的,但是现在工程中没有引入Hello.java这个类。所以会出错。
3.2.4 执行mvn clean install命令
1、 打开命令行
2、 把当前路径调节到Hello工程的根目录
3、 执行mvn clean install命令,把Hello整个工程放入到仓库中
如果执行成功,则会在仓库中看到。
在仓库中的位置。
3.2.5 执行mvn package命令打包HelloFriend工程
说明成功了。
可以看到成功以后,在target目录下多了一个jar包
该jar包为当前工程的jar包。
3.2.6 建立cn.itcast.maven包及HelloFriend类
3.2.7 编辑HelloFriend类
3.2.8 建立cn.itcast.maven包和测试类HelloFriendTest类
3.2.9 编辑HelloFriendTest类
3.2.10 执行mvn package命令
上图中的”say hello”就是输出的结果。
maven的核心概念
4.1 项目对象模型
说明:
maven根据pom.xml文件,把它转化成项目对象模型(POM),这个时候要解析依赖关系,然后去相对应的maven库中查找到依赖的jar包。
在clean,compile,test,package等阶段都有相应的Plug-in来做这些事情。
而这些plug-in会产生一些中间产物。
4.2 插件的位置
在maven解压后的位置F:\work\course\maven\maven有一个bin文件夹,里面有
一个文件m2.config文件
set maven.home default ${user.home}/m2,其中该路径指明了仓库的存储位置。
其中settings.xml文件中
这个说明了仓库中的位置。
这里的插件就是执行maven的各种命令所需要的插件。
4.3 maven坐标
4.3.1 maven坐标的主要组成
groupId:定义当前maven项目属于哪个项目
artifactId:定义实际项目中的某一个模块
version:定义当前项目的当前版本
packaging:定义当前项目的打包方式
根据这些坐标,在maven库中可以找到唯一的jar包
4.4 依赖管理
4.5 继承管理
创建一个项目ParentJunit
新建一个项目:
编辑pom.xml文件
说明:只需要继承ParentJunit,所以junit就被引入到HelloJunit中了
4.6 仓库管理
可以根据maven坐标定义每一个jar包在仓库中的存储位置。
大致为:groupId/artifactId/version/artifactId-version.packaging
4.6.1 仓库的分类
本地仓库
~/.m2/repository/
每一个用户也可以拥有一个本地仓库
远程仓库
中央仓库:Maven默认的远程仓库
http://repo1.maven.org/maven2
私服:是一种特殊的远程仓库,它是架设在局域网内的仓库
镜像:用来替代中央仓库,速度一般比中央仓库快
maven在myeclipse中的应用
5.1 环境配置
如果所示,myeclipse自带maven,从上图看以看到Maven JDK是可以配置的,这里用了jdk1.6
从上图可以看出,我们可以利用myeclipse自带的maven,也可以使用自己的maven。
上图应用的就是自己的maven。
从最下面可以看出,这是settings.xml文件的路径。
这幅图说明了用户的settings.xml文件的位置和用户的仓库的位置。
这是最基本的环境的配置。
5.2 settings.xml文件
5.2.1 仓库的路径
通过配置localRepository的值可以改变仓库的路径。
5.2.2 配置私服的路径
5.2.3 直接连接互联网
如果不想连接私服,可以直接连接互联网。只需要把连接私服的所有的路径去掉即可。
5.3 创建maven工程
5.3.1 创建java project
选择Maven Project
选择快速创建maven-archetype-quickstart
填写group ID,Artiface Id,Version,Package属性
然后点击finish就可以了。
5.3.2 创建web project
新创建一个web project
添加maven support即可。
5.4 生命周期
Maven Build生命周期
Maven的生命周期是为了对所有的构建过程进行了抽象了,便于统一。
clean(清理)
此生命周期旨在给工程做清理工作,它主要包含以下阶段:
pre-clean - 执行项目清理前所需要的工作。
clean - 清理上一次build项目生成的文件。
post-clean - 执行完成项目清理所需的工作.
default(默认)
validate - 验证项目是否正确且所有必要的信息都可用。
initialize - 初始化构建工作,如:设置参数,创建目录等。
generate-sources - 为包含在编译范围内的代码生成源代码.
process-sources - 处理源代码, 如过滤值.
generate-resources -
process-resources - 复制并处理资源文件,至目标目录,准备打包。
compile - 编译项目中的源代码.
process-classes - 为编译生成的文件做后期工作, 例如做Java类的字节码增强.
generate-test-sources - 为编译内容生成测试源代码.
process-test-sources - 处理测试源代码。
generate-test-resources -
process-test-resources - 复制并处理资源文件,至目标测试目录。
test-compile - 将需测试源代码编译到路径。一般来说,是编译/src/test/java目录下的java文件至目标输出的测试classpath目录中。
process-test-classes -
test - 使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。
prepare-package -
package - 接受编译好的代码,打包成可发布的格式,如 JAR 。
pre-integration-test -
integration-test - 按需求将发布包部署到运行环境。
post-integration-test -
verify -
install -将包安装到本地仓库,给其他本地引用提供依赖。
deploy -完成集成和发布工作,将最终包复制到远程仓库以便分享给其他开发人员。
site(站点)
pre-site - 执行一些生成项目站点前的准备工作。
site - 生成项目站点的文档。
post-site - 执行需完成站点生成的工作,如站点部署的准备工作。
site-deploy - 向制定的web服务器部署站点生成文件。[2]
validate:验证项目的正确性以及包含所有必要的信息
compile:编译源码
test:编译和运行测试代码
package:把编译好的源码打成包,如jar
integration-test
verify
install:把项目安装到本地仓库中去,作为本地其他项目的依赖
deploy:把最终的包拷贝到远程仓库上和其他开发者和项目分享
日常报错:
Maven笔记一的更多相关文章
- maven笔记--持续更新
笔记: 在创建maven项目的时候,如果用到servlet的时候,需要导入包,这时候,需要导入本地仓库的jar包,即依赖包.语法如下 <dependency> <groupId> ...
- Maven笔记---超详细
显眼位置标注来源:此文章为B站课程黑马程序员Maven全套教程笔记,由本人整理. Maven简介 Maven的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM) POM (P ...
- maven笔记
jar间接依赖: 被依赖的jar的范围要设置成compile,因发布会包含test范围依赖的jar包. 建立项目之间的联系:先在pom中设定依赖关系,然后可以引用了 .conf: C ...
- Maven 笔记
maven DOS 打包命令:maven项目 cd 进入项目根目录执行 mav clean package;
- 框架Maven笔记系列 一 基础
主题:SpringMVC 学习资料参考网址: 1.http://www.icoolxue.com 2.http://maven.apache.org/ 1.Maven解决了什么问题? Maven基于项 ...
- maven笔记-入门(helloWorld)
maven: pom.xml:文件 groupId,artifactId,Version定义了一个项目的基本坐标 groupId:定义了项目属于哪个组,往往与项目所在的组织和公司有关 artifact ...
- Maven笔记(二)仓库
1.仓库布局 任何一个构件都有其唯一的坐标,根据这个坐标可以定义其在仓库中的唯一存储路径,这就是Maven的仓库布局方式 路径与坐标的对应关系为:groupId/artifactId/version/ ...
- Maven笔记(一)
1. 坐标 Maven坐标为各种构件引入了秩序,任何一个构件都有必须明确定义自己的坐标,而一组Maven坐标是通过一些元素定义的,它们是groupId, artifactId, version, pa ...
- maven笔记学习
一.修改setting.xml文件中的镜像 在导入他人项目或者在导入项目时,我们会出现在项目中不能识别maven配置的库文件的情况那么我们可以重新下载本地库, 首先我们可以修改我们安装的maven环境 ...
- maven笔记-将本地jar包打包进可执行jar中
参考资料:http://www.cnblogs.com/richard-jing/archive/2013/01/27/Maven_localjar.html 使用本地jar <dependen ...
随机推荐
- Java中查询某个日期下所有时间段的数据
除了利用时间段进行查询外,还有一个方法: 利用mybatis中的函数,将datetime转为date <if test="purch_date!= null and purch_dat ...
- Win10上面安装vmware,并在Vmware上面安装Ubuntu
一.安装vmware vmware安装包 链接:https://pan.baidu.com/s/178IOOuMOcotSrr6omIAM_A 提取码:c7ba vmware激活码 链接:https: ...
- Anaconda"无法定位程序输入点 OPENSSL_sk_new_reserve 于动态链接库Anaconda3\Library\bin\libssl-1_1-x64.dll上"的解决办法
Anaconda"无法定位程序输入点 OPENSSL_sk_new_reserve 于动态链接库Anaconda3\Library\bin\libssl-1_1-x64.dll上" ...
- Django框架之ORM的相关操作之分页(六)
分页是每个项目必不可少要写的一个功能,该篇文章就将记录一下使用ORM写分页的过程. 假设我们的数据库里面需要显示一些数据,而这个表中的数据大约有几千条数据,那么我们不可能将所有的数据都显示出来,那么就 ...
- PTA的Python练习题(十六)
第4章-15 换硬币 挺难的,这里学到一个range的用法: 也就是说range函数能实现顺序和倒序,取决于step是正是负 count = 0 x = int(input()) a = x // 5 ...
- bootstrap下拉选择框倒三角所占宽度
<select id="edit" class="form-control" style="width:42%;padding-right: 3 ...
- 12、API - 输入设备(API - Input Devices)
学习目录:树莓派学习之路-GPIO Zero 官网地址:https://gpiozero.readthedocs.io/en/stable/api_input.html 环境:UbuntuMeta-1 ...
- tensorflow按需分配GPU问题
使用tensorflow,如果不加设置,即使是很小的模型也会占用整块GPU,造成资源浪费. 所以我们需要设置,使程序按需使用GPU. 具体设置方法: gpu_options = tf.GPUOptio ...
- HashMap遍历,取出key和value
HashMap的遍历有两种常用的方法,那就是使用keyset及entryset来进行遍历,在用keySet(key)取value时候,需要key 第一种: Map map = new HashMap( ...
- 【PAT甲级】1099 Build A Binary Search Tree (30 分)
题意: 输入一个正整数N(<=100),接着输入N行每行包括0~N-1结点的左右子结点,接着输入一行N个数表示数的结点值.输出这颗二叉排序树的层次遍历. AAAAAccepted code: # ...