Maven
通常来说,项目往往是庞大复杂的,需要多个团队或成员合作,为了统一管理和更加便捷地进行项目开发,Maven可以说是一个不错的选择。和gradle类似,Maven是一个项目管理工具。Maven能够简化和标准化项目建设过程,使处理编译,分配,文档,团队协作和其他任务无缝连接。
Maven主要目标是提供给开发人员:
- 项目是可重复使用,易维护,更容易理解的一个综合模型。
- 插件或交互的工具,这种声明性的模式。
Maven项目的结构和内容在一个XML文件中声明,setting.xml是Maven的配置文件,pom.xml 项目对象模型(POM),这是整个Maven系统的基本单元。
1、环境配置
JDK: 1.8.0_91
Maven:3.6.1
Java工具:InterliJ IDEA
(1)Maven下载
在官网上下载压缩包
解压之后文件夹内部
配置系统环境(在系统变量中添加):
然后在Path中添加%MAVEN_HOME%\bin
这个时候可以试下打开cmd输入MVN -version查看是否安装好2、配置IDEA
安装好maven后需要对配置(conf)中的settings.xml进行修改
找到profile标签,位置大概为195行,修改如下,这里是修改jdk的版本
配置好本地仓库(设置为自己仓库的地址,因为原来在.m2下不好找):
然后设置IDEA中的maven,将maven仓库换成本地的,因为初始化是使用的maven是IDEA自己的,修改下面这三处。IDEA自带的maven版本太新不稳定,这里换成自己下载的。
importing也可以勾选(自动导入),还有jar包的源码(Sources)和说明(Documentation)
3、解读pom.xml文件
pom.xml主要分为三部分:
- 项目自身信息(坐标)
- 依赖关系(dependencie)
- 环境插件(plugin)
(1)在pom中具体体现:
①坐标
②项目运行依赖的jar包(这时候如果这个jar包不在本地仓库中,会直接从远程仓库或者中央仓库中下载),加载jar包过程中会根据jar包坐标先从本地仓库中寻找,然后再王远程仓库中寻找(即公司私服)也从中央仓库中寻找。私服搭建在局域网中,为局域网范围内的所有maven工程服务,中央仓库架设在Internet上,为全世界所有maven工程服务。
仓库中保存的内容:
Maven自身所需要的插件、第三方框架或工具的jar包、我们自己开发的maven工程
③插件
(2)maven结构
(3)maven依赖管理
Maven解析依赖信息时会到本地仓库中查找依赖jar包,maven中还有传递依赖关系。
一般来讲,普通情况下,假如A依赖B,即A中要用到B中的东西,现在C要用A中的东西,C现在就不仅需要依赖A也需要依赖B。
在maven中,maven可以避免这种情况。C只需要依赖A就可以了,其他的maven会去解决处理。即maven中只需要引入直接依赖关系的文件。
通常情况下,在一个共通的项目下,有一系列的项目。在这种情况下,我们就可以创建一个公共依赖的 pom 文件,该 pom 包含所有的公共的依赖关系,他就可以作为其他子项目 pom 的 pom 父。
依赖范围:
compile:对主程序有效,对测试程序有效,参与打包
test:对主程序无效,对测试程序有效,参与打包
provided:对主程序有效,对测试程序有效,从不参与打包,不参与部署
(4)生命周期
生命周期可分为Clean Lifecycle(clean)和Default Lifecycle(compile、test、package、install、deploy)还有Site Lifecycle(生成项目报告、站点、发布站点),这三个生命周期相互独立
下图就展示了每个构建项目的命令都对应了一个插件
4、实际操作
(1)命令行操作
在命令行生成marven项目:mvn archetype:generate
groupId 项目所在组,一般是组织或公司
artifactId 是当前项目在组中的唯一ID;
version 表示版本,SNAPSHOT表示快照,表示此项目还在开发中,不稳定。
成功生成
项目转换成IDEA项目:mvn idea:idea,转换之后项目就变成在当前目录下的文件,可直接使用IDEA打开
另附上其他maven构建指令(在命令行界面输入):
命令 | 作用 |
---|---|
mvn tomcat:run | 运行项目 |
mven clean | 把编译好的信息清空 |
mvn compile | 将src下main中代码编译 |
mvn test | 运行src下test里的代码文件使用合适的单元测试框架 |
mvn package | 将项目打包成指定类型包(如war、jar、ear包) |
mvn install | 运行并打包然后将打包好的项目放入本地仓库 |
mvn deploy | 复制最终的包到远程仓库与其他开发者和项目共享 |
(2)Maven创建java文件
这里选择的是骨架quickstart,是一个简单的java项目,如果有联网就可以下载。
这里设置Maven的坐标
这里选择Maven环境配置
创建并调整之后的目录(target是在运行之后出现的),在这里要将java文件夹设置为“Test Source Root”(选中右键找到如下图所示)
简单示例
App.java
结果(输出)
(3)Maven创建web文件
创建过程与前面java相同,不过是选择的骨架为webapp
目录(target是运行之后创建的):
初始化创建之后就存在index.jsp,这是一个简单的jsp文件,单显示“Hello World!”。在这里也要将java文件夹设置为Test Source Root,然后在java下新建一个文件夹存放servlet文件(这里是com.atyume.servlet)还有新建一个resource文件夹存放资源,设置为“Resources Root"。
建立MyServlet
<web-app>
<display-name>Archetype Created Web Application</display-name>
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>com.atyume.servlet.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/MyServlet</url-pattern>
</servlet-mapping>
</web-app>
web.xml
<web-app>
<display-name>Archetype Created Web Application</display-name>
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>com.atyume.servlet.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/MyServlet</url-pattern>
</servlet-mapping>
</web-app>
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<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>com.atyume</groupId>
<artifactId>mvn_web</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>mvn_web Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<!-- 为pom定义一些常量,在pom中的其它地方可以直接引用 使用方式 如下 :${file.encoding} -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- 使用jdk1.7进行编译-->
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<finalName>mvn_web</finalName>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<!-- 配置Tomcat插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8081</port>
<path>/</path>
<uriEncoding>UTF-8</uriEncoding>
</configuration>
</plugin>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
hello.jsp
<html>
<head>
<title>hello</title>
</head>
<body>
<table>
<tr>
<h2>hello maven</h2>
</tr>
<tr>
<td>username:</td><td><%=request.getParameter("username")%></td>
</tr>
<tr>
<td>password:</td><td><%=request.getParameter("password")%></td>
</tr>
</table>
</body>
</html>
双击clean可清理之前的编译信息
运行(输入tomcat即是运行端口号为8080)
显示结果:
打开http://localhost:8081/运行的是index.jsp
接下来我们在浏览器地址栏中输入
http://localhost:8081/MyServlet?password=abcd&username=hdyd
注:本文为学习笔记,仅做个记录