MyEclipse系列之maven

我最近两天在看maven,因为之前用MyEclipse的ssh框架挺好用的,所以就用MyEclipse集成的maven进行学习。本文主要介绍maven project的构建。

1. maven介绍

1.1 什么是maven

maven是Apache下一个纯java开发的开源项目,它是一个项目管理工具,使用maven对Java项目进行构建、依赖管理。

2. 什么是项目构建

项目构建是一个项目从编写源代码、测试、运行、打包、部署、运行的过程。
maven将项目构建的过程进行标准化,每个阶段使用一个命令完成,下图展示了构建过程的一些阶段。

上图中部分阶段对应命令如下:

  • 清理阶段对应maven的命令式clean,清理输出的class文件。
  • 编译阶段对应maven的命令是compile,将java代码编译成.class文件。
  • 打包阶段对应的maven命令是package,Java工程可以打包成jar包,web工程可以打包成war包。

maven工程构建的优点:

  1. 1 一个命令完成构建、运行,方便快捷。
  2. 2 maven对每个构建阶段进行规范,非常有利于大型团队协作开发。

3. 什么是依赖管理

什么是依赖?一个Java项目可能要使用一些第三方的jar包才可以运行,那么我们说这个Java项目依赖了这些第三方的jar包。
举个例子:一个web project使用ssh框架,该web project依赖ssh框架,具体它依赖的是hibernate,spring,struts2.
什么是依赖管理?就是对项目所依赖的jar包进行规范化管理。

使用maven依赖管理添加jar的好处:

  • 通过pom.xml文件对jar包的版本进行统一管理,可避免版本冲突。
  • maven团队维护了一个非常全的maven仓库,里面包括了当前使用的jar包,maven工程可以自动从maven仓库下载jar包,非常方便。

4. maven仓库

4.1 maven仓库的作用

maven的工作需要从远程仓库(可以理解为互联网上的仓库)下载一些jar包并保存在本地仓库,本地仓库就是本地文件夹,当第二次需要此jar包时则不再从远程仓库下载,因为本地仓库已经存在了,可以将本地仓库理解为缓存,有了本地仓库就不用每次从远程仓库下载了。项目所需要的插件或jar包,优先从本地仓库找。

4.2 搭建本地仓库

默认本地仓库地址:${user.dir}/.m2/repository,${user.dir}表示windows用户目录。
配置本地仓库需要将repository.rar(自己去网上下载)解压至自己的电脑上。在maven的安装目录下的conf/settings.xml文件中配置本地仓库的位置:

将localRepository的地址改为你解压的repository.rar的地址。

将MyEclipse上的maven默认仓库地址改为你解压的repository.rar的地址。打开windows下的preference做如下图的操作,这样,本地仓库算是搭建好了。

4.3 maven项目工程目录

src/main/java—存放项目的.java文件
src/main/resources—存放项目资源文件,如spring、hibernate配置文件
src/test/java—存放所有单元测试.java文件,如JUnit测试类
src/test/resources—测试资源文件
target—项目输出位置,编译后的class文件会输出到此目录
pom.xml—maven项目核心配置文件

5. 构建web工程

5.1 创建maven工程

右击空白处,选择new Maven Project,这里将create a simple project勾选上

照着如下图定义坐标,注意groupId一般为公司或组织的名称,ArtifactId一般为项目的名称,packaging为打包方法,web工程为war,java工程为jar。

创建好后,pom.xml上会有个红叉,手动在main下新建一个web-app,在web-app下新建一个WEB-INF,再在其下建一个web.xml。在pom.xml里写上如下类容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<build>
<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>
</plugins>
</build>

5.2 定义web.xml

在src/web-app/WEB-INF下的web.xml文件写上如下类容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?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>
</web-app>

5.3编写servlet

在src/main/java中创建servlet,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package com;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ServletTest extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

response.setContentType("text/html");
this.doPost(request,response);
}

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

response.setContentType("text/html");
request.getRequestDispatcher("/jsp/test.jsp").forward(request, response);
}

}

5.4 编写jsp

index.jsp的类容如下:

1
2
3
<body>
Hello Word <br>
</body>

test.jsp的类容如下:

1
2
3
<body>
运行一个servlet <br>
</body>

5.5 添加servlet/jsp的jar包

在pom.xml中添加如下类容,然后在你建的工程上右击选择maven-》update project加载所需要的servlet/jsp包。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
</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>

5.6 配置servlet

在web.xml里配置servlet

1
2
3
4
5
6
7
8
<servlet>
<servlet-name>ServletTest</servlet-name>
<servlet-class>com.ServletTest</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletTest</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>

5.7 运行

右击工程选择run as ,选择maven build,在Goals一行填写:tomcat:run运行。(特别注意,当所有步骤都做完之后,如果项目工程还有小红叉,解决办法:右击工程选择maven-》update project把Offline勾选上)