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
文件,修改默认仓库位置
<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>
3、修改IDEA设置Maven
注意:经常在IDEA中会出现一个问题就是项目自动创建完成后,它这个Maven Home
会自动使用IDEA默认的,如果发现了这个问题,必须手动改为本地的
注意:普通设置可能只对当前项目有效,所以必须全局设置(IDEA 2019 全局设置方法 file -> Other settings;IDEA 2020 设置方法 file -> New Projects Settings)
4、推荐导入源码
使用Maven创建Web项目
IDEA使用Maven
工程的Web
项目,这里主要讲使用骨架和不使用骨架来创建Maven
的Web
工程(注意一下这里使用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
的骨架
2、填写对应的信息
3、如果上面配置settings文件设置了,这里可选,不过保险起见还是看一下
4、这一步可选
正常情况下其他参数不用修改,但是这样会比较慢,有时候如果网速不好,就会卡的比较久,这是因为
Maven
这个骨架会从远程仓库加载archetype
元数据,但是archetype
又比较多,所以比较卡,这时候可以加个属性archetypeCatelog = internal
,表示仅使用内部元数据
-DrchetypeCatalog=internal
其他解释
archetypeCatalog
表示插件使用的archetype
元数据,不加这个参数时默认为remote
,local
即中央仓库archetype
元数据,由于中央仓库的archetype
太多了,所以导致很慢,指定internal
来表示仅使用内部元数据。
5、控制台显示这个则项目搭建成功
注意:这里可能IDEA版本不同,所以这里可能有点不同(有的需要点击右下角自动导入Enable Auto-Import
)
6、标记文件夹功能
因为
Maven
使用了骨架创建的项目只自带了不全,所以我们还需要手动添加文件目录然后标记功能。src
目录包含所有工程的源码文件,配置文件,资源文件等等。它下面的子目录一般包含main
(主要的工程源文件),test
(测试文件),site
(项目站点文件)
java
:Java源码文件夹
resources
:配置文件。例如xml
文件,properties
文件等
webapp
:资源目录。用于存放jsp
、js
、css
、image
等资源
这里是使用了骨架创建的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
应用
7、在IDEA中配置Tomcat
这里我是使用的IDEA2020版的,所以页面可能不太一样,根据下面的Error
进行导入Tomcat
的目录
8、部署项目
切换到 Deployment
选项卡中,点击右边的+
加号按钮,选择Artifact
Application content
,可以设置访问路径名,这里使用 / (即没有虚拟路径映射)
9、启动Tomcat
这里访问到的Hello World
是我们默认的index.jsp
中的内容
不使用骨架创建创建Maven的JavaWeb工程
不用勾选模板,直接next
后面步骤跟有骨架的差不多,这里就不举例了
目录结构详解
--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
中央仓库来说还是快了不少。