Maven工程开发

2022-11-29 08:42:40 浏览数 (2)

目录

一、Maven工程开发_构建Maven工程

二、Maven工程开发_pom文件配置

三、Maven工程开发_编写代码

四、Maven工程开发_依赖范围


一、Maven工程开发_构建Maven工程

接下来我们构建一个Maven的Web工程:

打开 idea,选择创建一个新工程

选择Maven工程,并使用maven的web工程模板

点击 Next 填写项目信息(所谓的公司名其实就是前两个包的包名)

点击 Next,此处不做改动,点击Finish构建项目

手动添加src/main/java目录,此时该目录还不能写Java代码。

将src/main/java目录设置为Java代码目录。

二、Maven工程开发_pom文件配置

pom文件最上方是项目基本信息:

groupId

groupId一般定义项目组名,命名规则使用反向域名。例如com.itbaizhan

artifactId

artifactId一般定义项目名,命名使用小写字母。项目发布后,它的坐标是groupId artifactId。

version

version定义版本号。版本号一般有三段,第一段:革命性的产品升级。第二段:新功能版本。第三段:修正一些bug。

packaging

packaging定义打包方式。

<properties>中定义一些配置信息:

<dependencies>中定义依赖的jar包坐标:

由于项目是web项目,需要写Servlet和JSP,所以需要引入Servlet和JSP的依赖。查找依赖坐标的网站:https://mvnrepository.com/

<dependencies>

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>4.11</version>

<scope>test</scope>

</dependency>

<!-- jsp -->

<dependency>

<groupId>javax.servlet.jsp</groupId>

<artifactId>jsp-api</artifactId>

<version>2.2</version>

</dependency>

<!-- servlet -->

<dependency>

<groupId>javax.servlet</groupId>

<artifactId>javax.servlet-api</artifactId>

<version>3.0.1</version>

</dependency>

</dependencies>

为什么之前的web项目中没有引入jsp和servlet的jar包?

因为之前项目中使用的是tomcat中的jsp和servlet中的jar包,在项目中没有引入。

<plugins>中定义第三方插件:

web项目依赖tomcat运行,所以添加tomcat7插件

<plugins>

<!-- tomcat插件 -->

<plugin>

<groupId>org.apache.tomcat.maven</groupId>

<artifactId>tomcat7-maven-plugin</artifactId>

<version>2.1</version>

<configuration>

<port>8080</port>

<path>/</path>

<uriEncoding>UTF-8</uriEncoding>

<server>tomcat7</server>

</configuration>

</plugin>

</plugins>

三、Maven工程开发_编写代码

接下来编写Servlet和Jsp代码:

@WebServlet("/demo1")

public class MyServlet extends HttpServlet {

  @Override

  protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    req.getRequestDispatcher("hello.jsp").forward(req,resp);

   }

}

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<html>

  <head>

    <title>测试</title>

  </head>

  <body>

    <h1>你好,大学牲!</h1>

  </body>

</html>

运行项目,按照如图步骤,配置使用maven中的tomcat7插件运行项目:

点击OK后配置完成,点击Idea的运行符号即可使用maven中的tomcat7插件运行项目。

Maven使用tomcat7运行项目的命令为:tomcat7:run

四、Maven工程开发_依赖范围

访问servlet后,发现报500异常,这是为什么呢?

这是由于项目中引入了Servlet和Jsp的jar包,而在项目运行时,Tomcat要使用它自带的Servlet和Jsp的jar包,这样就造成了jar包冲突。但如果项目不引入Servlet和Jsp的jar包,则根本无法通过编译。

此时可以设置依赖的作用范围解决该问题,设置Servlet和Jsp的jar包只在编译期起作用,运行时不起作用,这样不仅可以通过编译,还能在运行时避免jar包冲突。

通过在<dependency>中添加<scope>,可以设置依赖的作用范围,有以下取值:

compile

默认范围。表示该依赖在编译和运行时生效,项目打包时也会将该依赖打包进去。

provided

使用此依赖范围的Maven依赖,编译和测试时有效,但在运行时无效。典型的例子是servlet-api,在运行时Web容器已经提供依赖,就不需要Maven重复地引入一遍。

runtime

runtime范围表明编译时不需要生效,而只在运行时生效。典型的例子是JDBC驱动包,编译时只需要JDK的JDBC接口即可,只有运行项目时才需要具体的JDBC驱动。

test

test范围表明使用此依赖范围的依赖,只在编译和运行测试代码的时生效,程序的正常运行不需要此类依赖。典型的例子就是JUnit,它只有在编译测试代码及运行测试的时候才需要。

system

如果有些你依赖的jar包没有Maven坐标的,它完全不在Maven体系中,这时候你可以把它下载到本地硬盘,然后通过system来引用。(不推荐使用)

  • 所以对于Servlet和Jsp依赖,我们添加依赖范围为provided即可。

<dependency>

<groupId>javax.servlet.jsp</groupId>

<artifactId>jsp-api</artifactId>

<version>2.2</version>

<scope>provided</scope>

</dependency>

<dependency>

<groupId>javax.servlet</groupId>

<artifactId>javax.servlet-api</artifactId>

<version>3.0.1</version>

<scope>provided</scope>

</dependency>

重启项目,即可正常访问Servlet和Jsp。

所以,你们学废了吗?

0 人点赞