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 核心配置文件

  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>