Maven教程
来源:互联网 发布:贴片电容标称值算法 编辑:程序博客网 时间:2024/06/14 02:00
这篇博文记录学习maven的过程,使用Eclipse Version: Neon.3 Release (4.6.3)
已经内置了maven 3.3.3 但是我使用的是3.3.9版本的maven
介绍
Maven是Apache下一个纯Java开发的开源项目,它是一款项目管理工具,使用maven对java项目进行构建、依赖管理。项目的构建就是一个项目从编写源代码到编译、测试、运行、打包、部署的过程。
优点
1.一个命令完成构建运行,方便快捷
2.maven对每个构建阶段进行规范,有利于团队开发。
依赖管理
什么是依赖?一个java项目可能要使用一些第三方的jar才可以运行,那么我们说这个项目依赖了这些第三方jar包。
比如我们想构建ssh,那么这个项目就依赖struts spring hibernate 所需的jar包
什么是依赖管理?就是对所依赖的jar包进行规范化的管理。因为以往我们需要jar包的话是从网上直接下载jar然后添加到项目的lib目录下。
maven项目的依赖管理
maven管理jar包不需要手动向工程添加jar包,只需要在pom.xml(这是maven项目的配置文件)添加jar包的坐标,自动从maven仓库中下载jar包。
使用maven管理jar包的好处:
1.通过pom.xml文件对jar包的版本进行统一管理,可避免版本冲突。
2.maven维护了一个非常全的maven仓库,里面包括了主流的jar包,maven工程可以自动从仓库下载jar包。
maven的好处
1.一步构建
maven对项目构建的过程进行标准化,通过一个命令就可以完成构建过程
2.依赖管理
maven工程不需要手动导jar包,会自动下载,另外你导入一个jar会导入这个jar依赖的其他jar包
3.跨平台
maven可以在linux,windows上使用
4.maven提高了开发效率降低了维护成本
maven的安装
1.当我们下载好安装包解压后,配置系统变量 MAVEN_HOME 变量值写刚刚解压的目录
2.将 %MAVEN_HOME%/bin 加入到环境变量path中
3.打开cmd输入 mvn -v 如果看到版本信息则配置成功
maven仓库的作用
maven仓库分为远程库本地库中央库,maven就是从远程或中央下载jar到本地,项目中,先去寻找本地库,如果没发现对应的jar,那么就去请求远程库,在没有就去中央库下载到本地库。
本地仓库:
用来存储从远程或中央仓库下载的jar或插件,项目中使用的jar优先从本地库中找。
默认本地仓库位置:${user.dir}/.m2/repository user.dir代表windows的用户目录
我们可以打开maven的安装目录,里面有conf目录里面的settings.xml在里面配置
<localRepository></localRepository>可以改变本地库的位置
远程仓库:
如果本地仓库没有所需要的jar,默认去远程仓库下载,远程库可以在互联网也可以在局域网内。
中央仓库:
在maven软件中内置一个远程仓库,服务于整个互联网,它是由maven团队自己维护,里面存储了非常全的jar包。
maven项目工程目录约定
使用maven创建的工程我们称它为maven工程,maven工程具有一定的目录规范
src/main/java 存放项目的.java文件
src/main/resources 存放项目的配置资源文件
src/test/java 存放所有单元测试 .java文件 如Junti测试类
src/test/resources 测试资源文件
target 编译后的class文件.progect等文件
pom.xml maven项目的核心配置文件
Progect
|-src
| |-main
| | |-java ----存放项目.java
| | |-resources ----存放项目资源文件,如spring配置文件
|-webapps ----web工程的主目录
|-WEB-INF
|-web.xml
|-pom.xml 核心配置文件
![](file:///C:\Users\Administrator\AppData\Roaming\Tencent\Users\745221877\QQ\WinTemp\RichOle\QA26~EN(M%3_WZV6KMX_7X5.png)
maven常用命令
compile
compile是maven工程的编译命令,作用是将src/main/java下的文件编译为class文件输出到target目录下
在maven项目根下 cmd 执行 mvn compile
查看target目录,class文件生成,编译完成。
test
test是maven工程的测试命令,会执行src/test/java 下的单元测试类。
clean
clean是maven工程的清理命令,执行clean会删除target目录。
package
package是maven工程的打包命令,对于java工程执行package打成jar包,对于web工程打成war包
install
install是maven工程的安装命令,执行install会将项目打成jar或war发布到本地仓库
三套生命周期
clean Lifecycle 在进行真正的构建之前进行一些清理工作
Default Lifecycle 构建的核心部分,编译测试打包部署等
Site Lifecycle 生成项目报告,站点,发布站点
maven在eclipse里面的使用
我们打开Window-Prefereces-Maven-Installations
配置完再配置本地仓库 User settings
配置好这些再配置 show view 选择 Maven Repositories
在视图中构建索引,就可以看到本地库中的内容了,前提是你本地库不为空。。。
定义maven坐标
我自己的理解就是告诉maven帮我管理哪个公司的哪个项目的哪个版本的jar
<dependency>
<!-- 项目名称,定义为组织名+项目名,包名 --><groupId>javax.servlet</groupId>
<!-- 模块名称 项目名 --><artifactId>servlet-api</artifactId><!-- 版本号 --><version>2.5</version><!-- 作用范围 --><scope>provided</scope></dependency>new 一个maven项目
finish之后,项目可能pom.xml报错,去因为缺少web.xml文件导致的。自己加进去就行啦。
我们再来看看第二种方式
什么都不选。直接next
next
完成之后项目结构不完整。。不推荐使用。。哈哈。。
配置pom.xml
打开pom.xml
接着
然后ctrl+s保存一下,就可以啦,我们去pom.xml看的时候会发现多了一个struts的配置。
Scope依赖范围详解
A依赖B,需要在A的pom.xml文件添加B的坐标,添加坐标时需要指定依赖范围,依赖范围包括:
compile :编译范围,A在编译时依赖B,此范围为默认依赖范围,编译范围的依赖会用在编译、测试、运行
由于运行时需要所以编译范围的依赖会被打包
provided:依赖只有在当jdk或者一个容器已提供该依赖之后才使用,provided依赖在编译和测试时需要,在运行时不需要,比如servlet api我们设置了provided,就是为了防止冲突。
runtime:依赖在运行和测试时需要,但是在编译的时候不需要,比如jdbc驱动包,由于运行时需要所以runtime范围的依赖会被打包。
test:依赖在编译和运行都不需要,只在测试编译和测试运行阶段可用。比如 junit 由于运行时不需要,所以test范围的依赖不会被打包
system: system范围依赖与provided类似,但是必须显式的提供一个对于本地系统中jar文件路径,需要指定systemPath磁盘路径,system依赖不推荐使用。
总结
默认引入的jar ----compile 默认范围可以不写(编译、测试、运行都有效)
servlet-api,jsp-api----provided(编译测试有效,运行无效,防止和tomcat下jar冲突)
jdbc驱动 ----runtime(测试运行有效)
junit----test(测试有效)
依赖范围由强到弱的顺序是:compile>provided>runtime>test
<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>4.0.0</modelVersion><groupId>cn.itcast</groupId><artifactId>helloStruts</artifactId><version>0.0.1-SNAPSHOT</version><packaging>war</packaging><dependencies><dependency><groupId>org.apache.struts</groupId><artifactId>struts2-core</artifactId><version>2.3.24</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.0</version><scope>provided</scope></dependency></dependencies><build><!-- 配置了很多插件,第一个插件是指定项目的jdk版本,添加完此项之后,项目会报错,
直接 右键项目,Maven UpdateProgect就好了,第二个是指定tomcat版本 --><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>1.7</source><target>1.7</target><encoding>UTF-8</encoding></configuration></plugin><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.1</version><configuration><port>8080</port><path>/hellostruts</path><uriEncoding>UTF-8</uriEncoding><server>tomcat7</server></configuration></plugin></plugins></build></project>
然后我们自己编写一个action测试一下,把struts.xml放到 src/main/respurces下,然后web.xml配置struts的核心过滤器
写好后右键项目run as mavenBuild.. 输入命令tomcat7:run
断点调试
右键项目
二选一,选项目的话,就勾选当前项目即可。
如果不进行这一步进行bug测试,会拦不住bug..拦住了也不显示代码。。必须注意这点。
互联网上找maven JAR的网站 https://mvnrepository.com/
配置远程仓库:
在maven的settings.xml 文件里配置mirrors的子节点,添加如下mirror
例如阿里的maven
<mirror> <id>nexus-aliyun</id> <mirrorOf>*</mirrorOf> <name>Nexus aliyun</name> <url>http://maven.aliyun.com/nexus/content/groups/public</url> </mirror>
![](file:///C:\Users\Administrator\AppData\Roaming\Tencent\Users\745221877\QQ\WinTemp\RichOle\QA26~EN(M%3_WZV6KMX_7X5.png)
阅读全文
0 0
- Maven 教程
- MAVEN教程
- maven教程
- Maven教程
- maven 教程
- maven教程
- Maven 教程
- Maven教程
- maven教程
- Maven教程
- maven教程
- Maven 教程
- Maven教程
- Maven 教程
- Maven 教程
- Maven教程
- Maven教程
- Maven教程
- JavaWeb(1)_doGet与doPost区别
- TX2-安装Caffe深度学习框架
- 差分约束-Vijos-p1094
- leetcode之Insert Delete GetRandom O(1) 问题
- 2017 Multi-University Training Contest
- Maven教程
- 二叉树的深度优先遍历(栈)和广度优先遍历(队列)
- Linux tar命令
- 【BZOJ】1598 [Usaco2008 Mar]牛跑步 k短路(最短路径+A*)
- 会话技术
- MyBatis注解
- NYOJ 833 取石子(七)
- 2017最佳经典之作-AngularJs 中select 下拉多选
- A