Maven工程开发

时间:2022-11-16 07:54:26

目录

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

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

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

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


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

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

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

Maven工程开发 

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

Maven工程开发 

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

Maven工程开发

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

Maven工程开发 

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

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

Maven工程开发

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

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

Maven工程开发

 

groupId

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

artifactId

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

version

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

packaging

packaging定义打包方式。

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

Maven工程开发

 

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

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

Maven工程开发

 

<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插件运行项目:

Maven工程开发

 Maven工程开发

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

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

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

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

Maven工程开发

 

这是由于项目中引入了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。

所以,你们学废了吗?

Maven工程开发

 分享一下我最喜欢的星空图!!!