Maven学习笔记一
Maven 简介
maven是apache下的一个开源项目,是纯java开发,一款服务于Java平台的自动化构建工具。
构建就是以我们编写的Java代码、框架配置文件、国际化等其他资源文件、JSP页面和图片等静态资源作为原材料,去生产出一个可以运行的项目的过程。
构建过程的几个主要环节
- 清理:将以前编译得到的旧字节码文件删除,为下一次编译做准备
- 编译:将Java源代码编译成字节码文件
- 测试:自动调用junit程序
- 报告:测试程序执行的结果
- 打包:动态web工程打war包,java工程打jar包
- 安装:将打包得到的文件复制打“仓库”中指定的位置
- 部署:将动态Web工程生成的war包复制到Servlet容器指定的目录下,使其可以运行
Maven好处
1、普通的传统项目,包含jar包,占用空间很大。而Maven项目不包含jar包,所以占用空间很小。 但还是需要jar的,只是没有存在于maven项目里面,而是存在本地仓库中。
2、依赖管理,只需要在pom.xml配置需要的插件,就能在在项目中使用。主要是能够对jar包的统一管理,可以节省空间。
3、项目一键构建,maven可以进行编译、测试(junit)、运行、打包、部署。一个 tomcat:run命令就能把项目运行起来。
4、可以跨平台
5、应用于大型项目,可以提高开发效率。
Maven的安装配置
1、下载安装
下载地址:http://maven.apache.org/download.cgi,下载后直接解压到一个没有中文没有空格的文件夹里,解压后的目录如下:
Maven软件的核心文件:
2、Maven环境变量配置
前提是要配置jdk, maven3.3.9这个版本所需的jdk版本必须要1.7以上。最终要运行的是maven软件中bin目录的mvn命令。
2.1 添加系统变量
- 变量名:最好叫M2_HOME
- 变量值:就是maven软件解压的目录,比如:F:\class32\apache-maven-3.3.9
2.2 把M2_HOME添加到系统变量的path末尾,注意加分号。
2.3 验证maven是否配置成功
打开dos窗口,输入: mvn –v
Maven仓库
Maven有三种仓库
1、本地仓库,自己维护
如果想要修改maven的本地仓库位置,可以在maven的安装目录下的conf目录下的settings.xml配置文件中设置。
2、远程仓库(私服),公司维护
3、中央仓库, maven团队维护
总计jar包已达两个亿,所以无需担心没有我们需要的jar包,三种仓库的关系如下:
本地项目会先到本地仓库查找,如果有,直接使用,如果没有,会到远程仓库找,找到会下载到本地,没找到,会到中央仓库找,找到后本地仓库和远程仓库都会缓存一份。以便以后使用。当然如果没有远程仓库,则直接到中央仓库查找。
约定的目录结构
目录结构说明:
(1). src/main/java —— 存放项目的.java 文件
(2). src/main/resources —— 存放项目资源文件,如 spring, hibernate 配置文件
(3). src/test/java —— 存放所有单元测试.java 文件,如 JUnit 测试类
(4). src/test/resources —— 测试资源文件
(5). target —— 项目输出位置,编译后的 class 文件会输出到此目录
(6). pom.xml——maven 项目核心配置文件
注意:必须遵守以上的目录结构,即约定大于配置。如果是普通的 java 项目,那么就没有 webapp 目录
Maven的常用命令
执行与构建过程相关的Maven命令,必须进入pom.xml所在的目录,常用命令:
mvn clean:清理
mvn compile:编译主程序
mvn test:执行测试
mvn package:打包
mvn install:安装
Clean 清理编译的文件
Compile 编译了主目录的文件
Test 编译并运行了test目录的代码
Package 打包
Install 就是把项目发布到本地仓库
Tomcat:run 一键启动,运行tomcat7的时候使用需mvn tomcat7:run
Maven的生命周期
Maven的核心程序中仅仅定义了抽象的生命周期,具体的工作必须由特定的插件来完成。而插件本身并不包含在Maven的核心程序中,当需要用到某些插件时,就首先到本地仓库查找,如果找不到,就到中央仓库查找,如果连不上外网,就会构建失败。
其中常用的有:Compile test package install deploy(发布到私服)。
各个构建环节的执行顺序,不能打乱,必须按照既定的顺序执行;
maven的核心程序定义了抽象的生命周期,生命周期中各个阶段的具体执行任务有插件来完成;
maven核心程序为了更好的实现自动化构建,按照一下特点执行生命周期中的各个阶段:不论现在要执行的生命周期的哪一阶段,都是从这个生命中期最初的位置开始执行。
分为三种生命周期:
- Clean生命周期: clean
- Default生命周期:compile test package install deploy,执行后面的命令,前面的命令都会执行。比如执行install,则compile test package也会执行。
- Site生命周期:site
命令和生命周期的阶段的关系
不同的生命周期的命令可以同时执行。比如:mvn clean package
POM.xml
Project Object Model(项目对象模型),pom.xml对于Maven工程是核心配置文件,与构建过程相关的一切设置都在这个文件中进行配置。
坐标
使用下面三个向量可以在仓库中定位一个唯一的Maven工程
groupid:公司或组织域名倒序+项目名,比如com.yyb.springcloud
artifactid:模块名,比如spring-cloud-learn
version:版本,比如1.0.0
在IDEA中使用Maven构建项目
1、配置Maven
2、弹出如下界面,找到maven:
关于速度慢,卡死问题可以参考:解决IntelliJ IDEA 创建Maven项目速度慢问题 DarchetypeCatalog
3、设置好后,开始使用Maven 骨架创建 Java Web 项目
如果已按照上面的配置配置好,下面这一步默认就行。
下一步也是默认就行。
不出意外,就能看到创建好的项目
由上图可以看出,main下面并没有java文件夹,我们需要手动添加。添加好后,鼠标右键新建时,并不能添加class文件。
我们需要把java文件夹设置为Source,方法是点击右上角的project structure按钮。即可进入以下页面。
新建一个servlet,并添加依赖。
稍等片刻,jar包就会引入到我们的项目中,输出一个字符串试试:
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.getWriter().write("maven studing"); }
配置Servlet,由于maven生成的web.xml的Servlet版本太低,我们使用正常的web.xml覆盖掉自动生成的。
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>Servlet03</servlet-name> <servlet-class>com.yyb.test.Servlet3</servlet-class> </servlet> <servlet-mapping> <servlet-name>Servlet03</servlet-name> <url-pattern>/Servlet03</url-pattern> </servlet-mapping> </web-app>
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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.yyb</groupId> <artifactId>Maven03</artifactId> <packaging>war</packaging> <version>1.0-SNAPSHOT</version> <name>Maven03 Maven Webapp</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <!--一定要配置为provided,表示只在编译时使用此jar包,运行时tomcat自带有,不然会和tomcat起冲突--> <scope>provided</scope> </dependency> </dependencies> <build> <finalName>Maven03</finalName> <!--配置jdk版本为1.7--> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.5.1</version> <configuration> <source>1.7</source> <target>1.7</target> <encoding>UTF-8</encoding> </configuration> </plugin> <!--配置tomcat7--> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.1</version> </plugin> </plugins> </build> </project>
准备就绪,下面测试项目,如下所示:
在地址栏输入:http://localhost:8080/Maven03/Servlet03,如下所示:
到此为止,我们的项目构建就完成了。