MAVEN
1.什么是MAVEN
Maven是一个项目管理和综合工具。Maven提供了开发人员构建一个完整的生命周期框架。开发团队可以自动完成项目的基础工具建设,Maven使用标准的目录结构和默认构建生命周期。
Maven是一个将项目开发从创建到发布的独立的过程连接起来并且标准化的一个工具。
2.MAVEN的下载
2.1官网下载:http://maven.apache.org/
2.2 解压并且配置环境变量(jdk只配置了path是不行的,需要配置JAVA_HOME,jdk1.8有时会报错,用1.8以下版本),环境变量:maven解压的目录/bin
2.3 配置settings.xml文件(在conf中):
<localRepository>maven的绝对路径\resp</localRepository>
<mirror>
<id>随便填</id>
<name>随便填</name>
<url>私服的网址</url>
<mirrorOf>central</mirrorOf>
</mirror>
2.3 打开cmd输入maven –version显示版本号则成功
3.Maven的作用及特点
Manven是一个优秀的构建工具,可以自动化构建过程,从清理、编译、测试到生成报告,再到导包和部署。
是跨平台的,只要系统有jdk就行,并且它统一了发布的标准。
能够帮助开发者标准化构建过程。
4.Maven仓库
在程序的开发过程中会使用很多的jar包,所有的jar包都需要下载,而Maven仓库解决了这个问题,它将所有的jar包存在服务器,在开发过程中需要那个jar包就自动下载,提高了开发效率,apache的Maven仓库在美国(www.mvnrepository.com),但是访问人数多、网速慢,所有了私服的诞生,中国的私服是阿里巴巴提供的(maven.aliyun.com)。
配置:
5.Maven的常用命令
mvn archetype:generate :创建 Maven 项目
mvn compile :编译源代码
mvn test-compile :编译测试代码
mvn test : 运行应用程序中的单元测试
mvn site : 生成项目相关信息的网站
mvn clean :清除目标目录中的生成结果
mvn package : 依据项目生成 jar 文件
mvn install :在本地 Repository 中安装 jar
mvn deploy:将jar包发布到远程仓库
mvn eclipse:eclipse :生成 Eclipse 项目文件
6.Maven与普通方法开发步骤的区别
普通方法:
1. 创建项目
项目类型 javase javaee
2.编码阶段
编码+添加依赖的jar包+Tomcat
3.编译项目
运行jdk的javac编译
4.运行项目(必须指定项目的main方法)
Jdk的java命令 java –jar 项目名.jar(javase)
运行tomcat将war包放入webapps,启动访问(javaee)
5.打包发布
Maven融合了四个阶段(依赖jar仓库)
1.项目类型
项目类型 javase javaee,但是目录结构不一样
2.打开cmd进入项目目录,输入mvn archetype:generate将会下载jar包,如果是第一次需要等待一段时间,然后会显示10种项目,这里7是java项目,10是javaweb项目
3.选择后,会提示输入groupId(公司名),一般为输入域名倒写.然后提示输入artifactId(项目名),输入项目名。之后要求输入版本号,不输入默认为1.0(SNAPSHOT开发阶段RELEASE 发布阶段)。最后询问是否要将groupId应用为包名,回车默认为是。提示Y:输入Y
4.如果是创建java项目,那么要跳转到项目中有pom.xml文件的目录,然后输入mvn compile编译,之后输入mvn package打包,
最后输入java –cp target/jar包名 包名.主类名
如果是创建的javaweb,那么要跳转到项目中有pom.xml文件的目录,然后输入 mvn tomcat:run,最后浏览器访问
7.eclipse中创建maven项目
1.外部导入
配置:进入到项目中有pom.xml文件的目录输入mvn eclipse:eclipse,进入eclipse依次点击window—》Mave—》Installations—》Add,然后将你下载好的Maven添加到面板并勾选,
点击 User Settings—》Browse…,找到Maven中conf的settings.xml并导入,配置完成。
导入:进入eclipse依次点击File—》Import—》Manven—》Existing Manven Projects,点击导入jar(war)包,至此导入成功。
需要注意的:
pom.xml报错(没有web.xml),解决方法右键菜单Java EE Tools-》Generate Deployment Descriptor Stub jsp报错(缺少javaee库),解决方法关联tomcat 没错报错,右键Maven-》Update Project
2.创建
进入eclipse依次点击File-》New-》Maven Project(如果没有就去other搜索)
红框中的选项如果勾选那么下一步只会有三个选项(jar、war、pom),一般用这种方式创建,Parent Project是继承父项目的,选项填写父项目的公司名、项目名、版本号.
如果不勾选,就会出现10个选项,可以根据需要的选项创建(第7个是java项目,最后一个是javaweb项目)
3.打包
选中项目点击右键弹出菜单中选中Run As-》Run Configurations…-》Maven Build点击右键新建,显示的框中必填的有Name(自己填)、Base dirctory(就是要打包的项目,点击 Borwse Workspace添加)、Goals(maven命令,这里是package),然后点击保存并运行,再回到target目录如果有jar(war)包,就代表打包成功!
8.pom.xml(重要)
<modelVersion> maven的版本不能超过4.0.0</modelVersion>
<groupId>公司名</groupId>
<artifactId>项目名</artifactId>
<version>版本号</version>
<packagin>项目类型(jar、war)可互相转换</packagin>
项目依赖的jar包,配置成功自动下载,可以配置多个jar包
<dependencies>
从仓库下载jar包
<dependency>
<groupId>公司名</groupId>
<artifactId>项目名</artifactId>
<version>版本号</version>
</dependency>
从本地系统寻找jar包(对于不开源的)
<dependency>
<groupId>公司名</groupId>
<artifactId>项目名</artifactId>
<version>版本号</version>
<scope>system</scope>
<systemPath>本地jar包绝对路径</systemPath>
</dependency>
</dependencies>
插件
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>tomcat-maven-plugin</artifactId>
<version>1.1</version>
<configuration>
<port>8081</port>
<uriEncoding>UTF-8</uriEncoding>
</configuration>
</plugin>
</plugins>
</build>
Maven的继承
父项目:
<properties>定义所有jar的版本库</properties>
<dependencyManagement>不会引用jar包,版本号用el表达式表示,并且是properties定义的键,只是定义jar包的的标准</dependencyManagement>
子项目(引入jar包不需要声明版本):
<parent> 父类的公司名、项目名、版本号</parent>
9.scope的各个值
- compile:默认的scope。任何定义在compile scope下的依赖将会在所有的class paths下可用。maven工程会将其打包到最终的arifact中。如果你构建一个WAR类型的artefact,那么在compile scope下引用的JAR文件将会被集成到WAR文件内。
- provided:这个scope假定对应的依赖会由运行这个应用的JDK或者容器来提供。最好的例子就是servlet API。任何在provided scope下定义的依赖在构建时的类路径里是可用的,但是不会被打包到最终的artifact中。如果是一个WAR的文件,servlet API在构建时的类路径里是可用的,但是并不会被打包到WAR文件中。
- runtime:在runtime scope下定义的依赖只会在运行期可用,而在构建期的类路径下不可用。这些依赖将会被打包到最终的artifact中。比如你有一个基于web的应用需要在运行时访问MySQL数据库。你的代码没有任何MySQL数据库驱动的硬依赖。你的代码仅仅是基于JDBC API来编写,在构建期并不需要MySQL数据库驱动。然而,在运行期,就需要相应的驱动来操作MySQL数据库了。因此,这个驱动应该被打包到最终的artifact中。
- test:只用于测试变异的依赖(比如JUnit),execution必须定义在test scope下。这些依赖不会被打包到最终的artefact中。
- system:于provided scope很像。唯一的区别在于,在system scope中,你需要告诉Mave如何去找到这个依赖。如果你要引用的依赖在Maven仓库中不存在时,就可以用这个scope。不推荐使用system依赖。
- import:从其它的pom文件中导入依赖设置。