vlambda博客
学习文章列表

IDEA配置Maven+Tomcat构建Web项目

IDEA配置Maven+Tomcat构建Web项目

什么是Maven?

Maven是一个项目架构管理工具( Maven主要服务于基于Java平台的项目构建,依赖管理和项目信息管理),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件;它包含了一个项目对象模型,一组标准集合,一个项目生命周期,一个依赖管理系统,和用来运行定义在生命周期阶段中插件目标的逻辑。(简单来说Maven的核心功能便是合理叙述项目间的依赖关系,通俗点讲,就是通过pom.xml文件的配置获取jar包,而不用手动去添加jar包)

这里省略了安装和解压(这里我把Maven解压到自己电脑的D:\java jdk\apache-maven-3.8.1这个路径)

配置环境变量(方便IDEA识别)

M2_HOME D:\java jdk\apache-maven-3.8.1\bin

MAVEN_HOME D:\java jdk\apache-maven-3.8.1

D:\java jdk\apache-maven-3.8.1\bin

配置完成后win+R 运行cmd 输入 mvn -v,如果有显示版本号则配置成功

Maven目录详解

bin:包含了mvn运行的脚本,这些脚本用来配置执行java命令。

boot:只有一个jar包,以本次为例,该文件为plexus-classworlds-2.5.2.jar。plexus-classworlds是一个类加载器框架,相对于默认的java类加载器,他提供了更丰富的语法以方便配置,Maven使用该框架加载自己的类库。

lib: 目录包含了所有Maven运行时需要的java类库,Maven本身是分模块开发的,因此用户能看到诸如maven-core-3.0.jar、maven-model-3.0.jar之类的文件,此外这里还包含一些Maven用到的第三方依赖如commons-cli-1.2.jar、commons-lang-2.6.jar等等

maven-repo:是自行创建的本地仓库(下面会讲到)

LICENSE: 项目许可证

NOTICE: 该项目依赖的库文件的注意事项

README.txt: 项目的readme文件

配置conf目录下的settings文件

1、配置本地仓库

Maven会将工程中依赖的构件(也就是我们说的jar包)从远程下载到本机一个目录下管理(默认会下载到C盘,所以一般我们会修改本地仓库位置,自己新建一个文件夹才存放这些依赖的构件)

打开Maven目录 -> conf 下可以找到settings文件,修改默认仓库位置

IDEA配置Maven+Tomcat构建Web项目
image-20210423100257891
<localRepository>D:\java jdk\apache-maven-3.8.1\maven-repo</localRepository>

2、然后就是更换阿里镜像,加快依赖下载

<mirror>
           <id>nexus-aliyun</id>
           <mirrorOf>*,!jeecg,!jeecg-snapshots</mirrorOf>
           <name>Nexus aliyun</name>
           <url>http://maven.aliyun.com/nexus/content/groups/public</url> 
</mirror>
IDEA配置Maven+Tomcat构建Web项目
image-20210423100616164

3、修改IDEA设置Maven

注意:经常在IDEA中会出现一个问题就是项目自动创建完成后,它这个Maven Home会自动使用IDEA默认的,如果发现了这个问题,必须手动改为本地的

注意:普通设置可能只对当前项目有效,所以必须全局设置(IDEA 2019 全局设置方法 file -> Other settings;IDEA 2020 设置方法 file -> New Projects Settings)


IDEA配置Maven+Tomcat构建Web项目

IDEA配置Maven+Tomcat构建Web项目

4、推荐导入源码

IDEA配置Maven+Tomcat构建Web项目

使用Maven创建Web项目

IDEA使用Maven工程的Web项目,这里主要讲使用骨架和不使用骨架来创建MavenWeb工程(注意一下这里使用Maven创建Java工程和Web工程是有区别的,这里不会讲IDEA使用Maven创建Java工程,请自行百度)

Maven创建Java项目和Web项目区别?

Web项目是网页的编码,像jsp,servlet,struts这类的,Web项目中的JAVA文件是Tomcat服务器来触发的。而Java项目的话,是AWT,SWING这类的编码。但是java项目里是main()方法来开始的。Web项目需要服务器;而Java项目不需要服务器。Web项目需要用Java来实现网站或系统的业务逻辑。

使用骨架创建创建Maven的Web工程

1、打开File->Project,选择Maven的骨架

IDEA配置Maven+Tomcat构建Web项目
image-20210423130209982

2、填写对应的信息

IDEA配置Maven+Tomcat构建Web项目
image-20210423132259324

3、如果上面配置settings文件设置了,这里可选,不过保险起见还是看一下

IDEA配置Maven+Tomcat构建Web项目
image-20210423132735064

4、这一步可选

正常情况下其他参数不用修改,但是这样会比较慢,有时候如果网速不好,就会卡的比较久,这是因为Maven这个骨架会从远程仓库加载archetype元数据,但是archetype又比较多,所以比较卡,这时候可以加个属性 archetypeCatelog = internal,表示仅使用内部元数据

-DrchetypeCatalog=internal

其他解释

archetypeCatalog表示插件使用的archetype元数据,不加这个参数时默认为remotelocal即中央仓库archetype元数据,由于中央仓库的archetype太多了,所以导致很慢,指定internal来表示仅使用内部元数据。

IDEA配置Maven+Tomcat构建Web项目
image-20210423133554019

5、控制台显示这个则项目搭建成功

注意:这里可能IDEA版本不同,所以这里可能有点不同(有的需要点击右下角自动导入Enable Auto-Import

IDEA配置Maven+Tomcat构建Web项目
image-20210423140443904

6、标记文件夹功能

因为Maven使用了骨架创建的项目只自带了不全,所以我们还需要手动添加文件目录然后标记功能。src目录包含所有工程的源码文件,配置文件,资源文件等等。它下面的子目录一般包含main (主要的工程源文件),test(测试文件),site(项目站点文件)

java:Java源码文件夹

resources:配置文件。例如xml文件,properties文件等

webapp:资源目录。用于存放jspjscssimage等资源

这里是使用了骨架创建的web项目的初始目录结构

IDEA配置Maven+Tomcat构建Web项目

目录结构详解

--src     应用程序源代码和测试程序代码的根目录
  --main  
    --java  Java源代码目录
    --resources  一般用来存放一些资源文件
    --webapp  web项目根目录,用来存放web配置文件以及jsp页面等 
      --WEB-INF  
        --web.xml  web项目配置文件(web工程配置文件,完成用户请求的逻辑名称到真正的servlet类的映射
jsp文件和静态资源文件)
      --index.jsp   初始页面
  --test
    --java  测试程序代码目录
    --resources  测试用到的资源文件
--target  编译后的输出目录,临时创建的(输出文件夹,用来存放项目中某个model编译后的文件)

选择对应完后如下图,然后点击Apply应用

IDEA配置Maven+Tomcat构建Web项目
image-20210423153245580
IDEA配置Maven+Tomcat构建Web项目
xzh

7、在IDEA中配置Tomcat

IDEA配置Maven+Tomcat构建Web项目
webtomcat

这里我是使用的IDEA2020版的,所以页面可能不太一样,根据下面的Error进行导入Tomcat的目录

IDEA配置Maven+Tomcat构建Web项目
IDEA配置Maven+Tomcat构建Web项目

8、部署项目

切换到 Deployment 选项卡中,点击右边的+加号按钮,选择Artifact

IDEA配置Maven+Tomcat构建Web项目
IDEA配置Maven+Tomcat构建Web项目

Application content,可以设置访问路径名,这里使用 / (即没有虚拟路径映射)

IDEA配置Maven+Tomcat构建Web项目

9、启动Tomcat

IDEA配置Maven+Tomcat构建Web项目

这里访问到的Hello World是我们默认的index.jsp中的内容

不使用骨架创建创建Maven的JavaWeb工程

不用勾选模板,直接next

IDEA配置Maven+Tomcat构建Web项目
image-20210423144319729

后面步骤跟有骨架的差不多,这里就不举例了

IDEA配置Maven+Tomcat构建Web项目
image-20210423151839461

目录结构详解

--src	应用程序源代码和测试程序代码的根目录
--main  
    --java  Java源代码目录
--resources 项目的配置文件
--test
--java 项目的测试类,比如说JUnit代码
--pom.xml Maven所需要jar包依赖和插件依赖都放在这

Maven一些文件配置的详解

Maven最核心的文件是pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>

<!--Maven版本和头文件-->
<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>

    <!--这里是刚刚创建Maven项目的时候配置的GAV-->
  <groupId>com.cjjy</groupId>
  <artifactId>JavaWeb_Skeleton</artifactId>
  <version>1.0-SNAPSHOT</version>
    <!--packaging:项目的打包方式
 jar:Java应用
 war:JavaWeb应用
 -->

  <packaging>war</packaging>
 
  <name>JavaWeb_Skeleton Maven Webapp</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

    <!--项目的默认构建编码-->
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
       <!--编译版本-->
    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>
  </properties>

     <!--项目依赖-->
  <dependencies>
       <!--具体依赖的jar包配置文件-->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
      
       <!--Maven的高级之处在于,他会帮你导入这个JAR包所依赖的其他jar包-->
      <!-- https://mvnrepository.com/artifact/commons-dbutils/commons-dbutils -->
    <dependency>
      <groupId>commons-dbutils</groupId>
      <artifactId>commons-dbutils</artifactId>
      <version>1.6</version>
    </dependency>
  </dependencies>

     <!--项目构建用的东西-->
  <build>
    <finalName>JavaWeb_Skeleton</finalName>
  </build>
</project>

Maven坐标(GAV)的查找详解

Maven坐标为各种组件引入了秩序,任何一个组件都必须确定义自己的坐标;Maven坐标主要组成(GAV)确定一个jar在互联网位置

<!-- https://mvnrepository.com/artifact/commons-dbutils/commons-dbutils -->
<dependency>
    <groupId>commons-dbutils</groupId>
    <artifactId> commons-dbutils</artifactId>
    <version>1.6</version>
</dependency>

坐标的查找网站:https://mvnrepository.com/

dependency:依赖

groupId:定义当前Maven组织名称

artifactId:定义实际项目名称

version:定义当前项目的当前版本

一般这里GroupId一般写公司名(com.xxxx格式开头)ArtifictId一般写项目名

Maven会帮你导入这个JAR包所依赖的其他jar包

Maven仓库详解

对于 Maven 来说, 仓库只分为两类:本地仓库和远程仓库。远程仓库又分为中央仓库、私服、其他公共库

本地仓库

本地仓库,顾名思义,就是Maven在本地存储构件的地方。Maven的本地仓库,在安装Maven后并不会创建,它是在第一次执行Maven命令的时候才被创建,Maven本地仓库的默认位置:无论是Windows还是Linux,在用户的目录下都有一个.m2/repository/的仓库目录,这就是Maven仓库的默认位置

远程仓库

Maven 根据坐标寻找构件的时候,它首先会查看本地仓库,如果本地仓库存在,则直接使用;如果本地没有,Maven 就会去远程仓库查找,发现需要的构件之后,下载到本地仓库再使用。如果本地仓库和远程仓库都没有,Maven 就会报错。远程仓库分为三种:中央仓库 ,私服, 其他公共库。

中央仓库

私服

私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的Maven用户使用。当Maven需要下载构件的时候,它从私服请求,如果私服上不存在该构件,则从外部的远程仓库下载,缓存在私服上之后,再为Maven的下载请求提供服务。我们还可以把一些无法从外部仓库下载到的构件上传到私服上 (如果我们一个团队中有几百个人在开发一些项目,都是采用maven的方式来组织项目,那么我们每个人都需要从远程仓库中把需要依赖的构件下载到本地仓库,这对公司的网络要求也比较高,为了节省这个宽带和加快下载速度,我们在公司内部局域网内部可以架设一台服务器,这台服务器起到一个代理的作用,公司里面的所有开发者去访问这个服务器,这台服务器将需要的构建返回给我们,如果这台服务器中也没有我们需要的构建,那么这个代理服务器会去远程仓库中查找,然后将其先下载到代理服务器中,然后再返回给开发者本地的仓库)

私服优点 :可以加快Maven构建、节省自己的外网速度、可以部署第三方构建、降低中央仓库的负担等

其他公共库

中央仓库是在国外的,访问速度不是特别快,所以有很多比较大的公司做了一些好事,自己搭建了一些Maven仓库服务器,公开出来给其他开发者使用,比如像阿里、网易等等,他们对外提供了一些Maven仓库给全球开发者使用,在国内的访问速度相对于Maven中央仓库来说还是快了不少。