IDEA+Maven配置Tomcat服务器构建Web项目

792 阅读12分钟

IDEA配置Maven+Tomcat构建Web项目

什么是Maven?

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

下载地址:maven.apache.org/download.cg…

这里省略了安装和解压(这里我把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

PATH环境 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使用该框架加载自己的类库。

conf:配置文件。该目录下有一个重要的配置文件settings.xml,修改此文件可以全局的定制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文件,修改默认仓库位置

image-20210423100257891

<localRepository>D:\java jdk\apache-maven-3.8.1\maven-repo</localRepository>

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

settings配置文件下有个mirrorsMaven 会默认从Maven官方提供的服务器下载jar包。而官方服务器在国外,因为大家都知道的原因,网速很慢,而且容易卡断。 为了便于快速下载相关jar包,可以使用国内Maven 阿里云的下载地址:使用阿里云下载路径

<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>

image-20210423100616164

3、修改IDEA设置Maven

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

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

4、推荐导入源码

使用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 maven项目里是main()方法来开始的。Web项目需要服务器;而Java项目不需要服务器。Web项目需要用Java来实现网站或系统的业务逻辑。

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

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

image-20210423130209982

2、填写对应的信息

image-20210423132259324

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

image-20210423132735064

4、这一步可选

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

-DrchetypeCatalog=internal

其他解释

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

image-20210423133554019

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

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

image-20210423140443904

6、标记文件夹功能

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

javaJava源码文件夹

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

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

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

目录结构详解

--src     应用程序源代码和测试程序代码的根目录
  --main  
    --java  Java源代码目录
    --resources  一般用来存放一些资源文件
    --webapp  web项目根目录,用来存放web配置文件以及jsp页面等 
      --WEB-INF  WEB-INF目录是一个受服务器保护的目录,浏览器无法直接访问到此目录的内容
        --web.xml  web项目配置文件(web工程配置文件,它是整个动态web工程的配置部署文件,可以配置很多关于web工程的组件,例如Servlet程序、Filter过滤器、Listener监听器、Session超时等
jsp文件和静态资源文件)
      --index.jsp   初始页面
  --test
    --java  测试程序代码目录
    --resources  测试用到的资源文件
--target  编译后的输出目录,临时创建的(输出文件夹,用来存放项目中某个model编译后的文件)

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

image-20210423153245580

xzh

7、在IDEA中配置Tomcat

webtomcat

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

8、部署项目

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

我们将需要部署的web工程添加到Tomcat运行实例中 war和war exploded区别?

  • war模式这种可以称之为是发布模式,看名字也知道,这是先打成war包,再发布

  • war exploded模式是直接把文件夹、jsp页面 、classes等等移到Tomcat 部署文件夹里面,进行加载部署。因此这种方式支持热部署,一般在开发的时候也是用这种方式。

  • 在平时开发的时候,使用热部署的话,应该对Tomcat进行相应的设置,这样的话修改的jsp界面什么的东西才可以及时的显示出来

选择第二个war exploded热部署到时候重启Tomcat有以下4个选项(简单来说就是你需要修改了工程的代码后不需要重启Tomcat,选择下图第二个选项即可)

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

9、启动Tomcat

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

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

不用勾选模板,直接next

image-20210423144319729

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

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>

坐标的查找网站: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内置的一个默认的远程仓库地址,不用用户进行配置。中央仓库包含了这个世界上绝大多数流行的开源Java构件,以及源码、作者信息、SCM,信息、许可证信息等(中央仓库是在国外的,访问速度不是特别快,所以有很多比较大的公司做了一些好事,自己搭建了一些Maven仓库服务器,公开出来给其他开发者使用,比如像阿里、网易等等,他们对外提供了一些Maven仓库给全球开发者使用,在国内的访问速度相对于Maven中央仓库来说还是快了不少)

私服

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

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

其他公共库

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