古语有云: 万恶淫为首,百善孝为先。 我们后辈当自勉。
上一章简单介绍了Maven的生命周期和依赖传递(四),如果没有看过,请观看上一章
一. Maven 两个项目的引用依赖
先来稍微用实例讲解一下,两个Maven jar类型的项目是如何进行依赖的, 感受一下,Maven的强大之处。
项目B 依赖于项目A 的某些类。
一.一 创建 项目A
(只是简单创建,不会创建的可以看第二章内容)
打开 eclipse, 文件—>新建—>其他–>找到Maven—>选择 Maven-Project
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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.yjl</groupId>
<artifactId>MavenA</artifactId>
<version>0.0.1-SNAPSHOT</version>
</project>
在 MavenA 项目下,在 src/main/java 创建一个类 Hello, 里面返回一下老蝴蝶的名字。
package com.yjl;
/**
* @author 岳泽霖
*/
public class Hello {
public String getName(){
return "岳泽霖,花名 两个蝴蝶飞";
}
}
一.二 创建项目B
与上面是同样的操作步骤。
在 src/main/java 中创建一个 MyHello 类。
package com.yjl;
/**
@author 岳泽霖
*/
public class MyHello {
public static void main(String []args){
Hello hello=new Hello();
System.out.println(hello.getName());
}
}
会报 Hello 类没有找到的错误。
要想 MyHello 类可以调用 项目A里面的 Hello 类, 按照以前的做法,是将 项目A导出成 一个jar包,放置在 B 下面,添加到路径下,这样B 就可以引用了。 这一点也是与 Maven 一样的,但Maven 并不需要这么处理。
直接点击 MavenB 里面的 pom.xml ,选择第二个 Dependencies 选项卡,点击添加 依赖,搜索 MavenA, 发现可以搜索到,直接添加 Maven A依赖
就可以发现 在 pom.xml 中添加了依赖
<dependencies>
<dependency>
<groupId>com.yjl</groupId>
<artifactId>MavenA</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
与创建 MavenA时的 pom.xml 里面的内容是一致的。
不需要 再将 MavenA 打包后放置在 MavenB里面。
一.三 更新项目,解决出错的常用方法
发现,这个时候,虽然添加了依赖,但还是显示报错。
不应该啊,已经添加 Hello.java 的依赖了啊 。 切记,一定要记住 Maven 工程中这种情况, 要更新一下 Maven项目。
选中项目B, 右键选中Maven, 选中 Update Project, 选中 MavenB, 进行确定即可。
这样,就发现项目A 已经导入进来了。
运行 MyHello.java , 以Application 的方式运行即可。控制台打印输出。
一.四 直接修改项目,直接更新Jar 包。
上面的,普通的项目也可以做到了,没有什么骄傲的啊。 如果这个时候再修改 项目A 里面的内容,即 项目A的 Hello.java 里面的getName() 方法, 项目B要引用该怎么办呢? 先将修改好的项目A重新导出 Jar包,然后再放置到 MavenB 里面,重新运行B.
而 Maven 完全不需要这样。
如果你修改 Hello.java 中getName() 的方法返回值,如:
public String getName(){
return "岳泽霖,原名岳建立";
}
这个时候,不需要任何操作,只需要直接去项目B 下运行 MyHello.java 即可,控制台会自动打印新的输出语句。
为什么可以直接运行呢,这就是 jar版本中 SNAPSHOT 快照的作用了。 关于快照的作用,可以看老蝴蝶第三章写的内容。
这只是Maven 强大的作用之一而已,而且是小小的之一。
Maven 的Jar项目,没有什么好讲的,主要的还是Web 项目。
二. Maven 创建一个简单 WEB 项目 如Servlet项目
二.一 创建一个war 类型的项目
打开eclipse, 文件–>新建—>其他–>Maven 选择 Maven Project,跳过原型,进入到下一步:
注意,这个时候 packaging 选择的是 war 类型。
二.二 添加web.xml 文件
新创建好 ServletMaven 的 Web 项目之后,发现项目 pom.xml 文件报错了。
显示错误文字是: web.xml is missing and <failOnMissingWebXml> is set to true
我们就需要添加一个 web.xml 文件了。
点击src/main/ 目录下,发现相比较 Jar项目,多了一个 webapp 文件夹。 其实这个 webapp 文件夹就相当于以前的 WebContent 文件夹。
构建标准的 web 目录结构。
在webapp 目录下,创建 一个 META-INF 文件夹 和 WEB-INF 文件夹。在 WEB-INF 文件夹,需要再添加一个web.xml 文件
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"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
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>
然后,再更新 Maven 项目, Alt+F5, 点击确定即可。
也可以利用工具完成 ,不需要手动添加。
选中 ServletMaven 项目, 右键 Java EE Tools——>Generate Deployment Descriptor Stub, 系统便会自动创建 web.xml 文件了。
推荐使用工具完成。
二.三 添加 servlet-api 和jsp-api 的依赖
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
</dependencies>
二.四 创建 Servlet 类
在 src/main/java 下,创建一个 HelloServlet 类
package com.yjl;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @author 岳泽霖
*/
public class HelloServlet extends HttpServlet{
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String message="你好啊,岳泽霖";
req.setAttribute("message",message);
req.getRequestDispatcher("/index.jsp").forward(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO 自动生成的方法存根
doGet(req, resp);
}
}
二.五 在web.xml 下,添加 servlet的映射
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.yjl.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
二.六 在webapp 文件夹下 添加 index.jsp 文件
前台展示 message的值
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>第一个Web类型的Maven 项目</title>
</head>
<body>
${message}
</body>
</html>
二.七 在pom.xml 文件里面配置 tomcat 插件
Maven 项目,可以启动 Tomcat, 然后运行项目,不需要再单独将项目部署到 Tomcat上,进行运行了。 也就是说, Maven 内置了Tomcat 。
既然内置了 Tomcat,那么就可以设置在 Maven 内置的Tomcat上的端口号,项目名等信息了,非常方便。
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<!--tomcat的插件名, tomcat7-maven-plugin, 用的是tomcat7版本-->
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8026</port> <!--tomcat的端口号-->
<path>/maven</path> <!--tomcat的项目名-->
</configuration>
</plugin>
</plugins>
</build>
老蝴蝶的 JDK版本是 JDK1.8, 注意版本号, tomcat7 用的是2.2, 不是2.0. 2.0版本的话,可以会版本不匹配。
如果Tomcat启动时报错,注意看一下,是否是版本不匹配导致 的。
二.八 Maven 启动Tomcat
Maven 项目,右键选择运行方式—> Maven build…
输入命令: tomcat7:run
tomcat7 指的是版本是 7 , 也见过 tomcat:run ,表示运行版本是6 ,现在不用6了,配置的是7.
二.九 观察控制台
说明 Maven 启动 tomcat成功了。
按照它给的网址,进行输入:
http://localhost:8026/maven/hello , 报错了
报的是 : Class com.yjl.HelloServlet is not a Servlet
这就是第四章说得 依赖范围的问题。
需要指定一下 servlet-api 和 jsp-api 的依赖范围为 provided
二.十 在 servlet-api 和jsp-api 中添加依赖范围
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
</dependencies>
二.十一 关闭控制台,重新按照 二.八进行启动 tomcat7:run
控制台运行 正确, 重新访问 http://localhost:8026/maven/hello ,显示正确。
注意,一定要设置其依赖范围 为provided
二.十二 将其打包,放置在本地服务器上
在 pom.xml 中,将 tomcat插件的设置去除掉, 二.七 的部分去除掉。
项目,右键选择运行方式 —> Maven build …
输入命令 package
观察 target 目录:
将 war 包放置在 本地 Tomcat 的 webapp 目录下, 启动本地的Tomcat
启用本地的 tomcat之后:
输入网址 : http://localhost:8027/ServletMaven-0.0.1-SNAPSHOT/hello
成功。
谢谢!!!