JavaWeb--Maven介绍及在IDEA中使用MAVEN

本文详细介绍了Maven的基本概念、作用以及为何要学习Maven。Maven是一个项目管理工具,主要负责便捷地导入和管理jar包。遵循'约定大于配置'的原则,简化了项目结构和依赖管理。文中还涵盖了Maven的安装、环境变量配置、阿里云镜像设置、本地仓库配置以及在IDEA中的使用。此外,讲解了Maven项目结构、pom.xml配置文件、资源文件导出问题的解决方案以及父子工程的概念。最后,提到了在IDEA中解决Maven Web应用运行时的ClassNotFound问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Maven

为什么要学习maven ?

  1. 在javaweb开发中,需要使用大量的jar包,需要我们去导入。
  2. 如何能够让一个东西自动帮我们导入和配置jar包,由此,maven诞生

Maven项目架构管理工具

我们目前用来就是方便导入jar包的。

Maven的核心思想:约定大于配置。(有约束,不要去违反)

  • 约定: 能够满足大多数人习惯的约定就是一种好的约定,而在程序中,能够简化代码实现,使代码高可用的约定就是一种好的约定。

  • 约定大于配置: 就是在开发中,如果有些值你没有配置的话,那程序会取一个默认值,换句话说,能取默认值的配置,就不需要配置了,这个默认值就是约定,约定可以减少很多配置。

  • 在maven的结构中:

    • /src/main/java目录用来存放java源文件
    • src/main/resources目录用来存放资源文件,如application.yml文件和properties文件等。
    • /src/test/java目录用来存放java测试文件
    • /src/test/resources目录用来存放测试资源文件
    • /src/test/resources目录用来存放测试资源文件
  • maven为你做了很多事情,只是它都对用户隐藏了起来,你只需要遵循它的约定即可

  • 约定大于配置是一个简单的概念。系统,类库,框架假定其合理的默认值,而非要求提供不必要的配置。在大部分情况下,使用框架提供的默认值会让项目运行的更快。

下载安装maven

官网: 点击进入

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0NM6zG0W-1629907613255)(C:\Users\张盛滨\AppData\Roaming\Typora\typora-user-images\image-20210825230931754.png)]

下载后解压安装即可。

配置环境变量

在我们的系统环境变量中,配置如下变量:

  • M2_HOME (maven目录下的bin目录)
  • MAVEN_HOME (maven的目录)

以我的maven配置目录示例:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lG0uOpDx-1629907613259)(C:\Users\张盛滨\AppData\Roaming\Typora\typora-user-images\image-20210825231327770.png)]

  • 在系统的Path中配置 %MAVEN_HOME%\bin

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k0bRmGSs-1629907613262)(C:\Users\张盛滨\AppData\Roaming\Typora\typora-user-images\image-20210825231603616.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wiFDpJuM-1629907613268)(C:\Users\张盛滨\AppData\Roaming\Typora\typora-user-images\image-20210825231658344.png)]

验证是否配置成功:

打开cmd窗口输入: mvn-version

出现以下内容即 配置成功!

在这里插入图片描述

修改maven的settings.xml为阿里云镜像

  • 镜像: mirrors

    • 作用: 加速我们相应jar包的下载
  • 国内建议使用阿里云的镜像

<mirror>
    <id>alimaven</id>
    <mirrorOf>*</mirrorOf>
    <name>Nexus aliyun</name>
    <url>https://maven.aliyun.com/repository/central</url>
</mirror>
  

在maven的settings.xml配置本地仓库

建立一个本地仓库: localRepository

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

其会在相应路径下生成一个名叫maven-repo的本地仓库文件夹。

在IDEA中使用MAVEN

创建一个Mavenweb模板项目

  1. 启动IDEA
  2. 以创建一个Maven webapp应用模板项目示例

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-adogyoJN-1629907613273)(C:\Users\张盛滨\AppData\Roaming\Typora\typora-user-images\image-20210825233216850.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PZUHhKtn-1629907613275)(C:\Users\张盛滨\AppData\Roaming\Typora\typora-user-images\image-20210825233253879.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u2pNZDiq-1629907613277)(C:\Users\张盛滨\AppData\Roaming\Typora\typora-user-images\image-20210825233402780.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wCJA43wy-1629907613279)(C:\Users\张盛滨\AppData\Roaming\Typora\typora-user-images\image-20210825233637024.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VQFdpL7g-1629907613280)(C:\Users\张盛滨\AppData\Roaming\Typora\typora-user-images\image-20210825233739434.png)]

  1. IDEA中Maven设置,IDEA项目创建成功后,看一眼Maven的配置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0rCfVZXN-1629907613282)(C:\Users\张盛滨\AppData\Roaming\Typora\typora-user-images\image-20210825234009920.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FcedRIg5-1629907613283)(C:\Users\张盛滨\AppData\Roaming\Typora\typora-user-images\image-20210825234058247.png)]

到这里,Maven创建模板项目的配置和使用就OK了!

注意: 这里使用maven模板创建web应用项目的话,创建出来的web应用的web.xml配置文件版本是过时的,需要手动更换成新版本的web.xml。

创建一个不带模板的普通的Maven项目

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OyRhR1bQ-1629907613284)(C:\Users\张盛滨\AppData\Roaming\Typora\typora-user-images\image-20210825234319741.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jYuH82bW-1629907613286)(C:\Users\张盛滨\AppData\Roaming\Typora\typora-user-images\image-20210825234434223.png)]

所以当前没有选择模板创建的空白maven项目目录结构如下:
在这里插入图片描述
如下这个web目录只有在创建web应用下才会有:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BupFsNAu-1629907613287)(C:\Users\张盛滨\AppData\Roaming\Typora\typora-user-images\image-20210825234525532.png)]
此时若想要在当前空白maven项目中创建web应用,可以在项目目录右键选择添加框架支持,选择webApplication即可:
在这里插入图片描述
在这里插入图片描述
发现此时目录结构多了个web目录,即代表当前是一个web应用了
在这里插入图片描述

标记文件夹功能

  • 方式一:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W7G8Rjvt-1629907613289)(C:\Users\张盛滨\AppData\Roaming\Typora\typora-user-images\image-20210825234847906.png)]

  • 方式二:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-taryu8gF-1629907613290)(C:\Users\张盛滨\AppData\Roaming\Typora\typora-user-images\image-20210825235123316.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OhuhXTEK-1629907613291)(C:\Users\张盛滨\AppData\Roaming\Typora\typora-user-images\image-20210825235142296.png)]

pom文件

pom.xml是Maven的核心配置文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D3QfQ6SJ-1629907613293)(C:\Users\张盛滨\AppData\Roaming\Typora\typora-user-images\image-20210825235352517.png)]

<?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,group/artifact/version-->
  <groupId>com.carson</groupId>
  <artifactId>javaweb-01-maven</artifactId>
  <version>1.0-SNAPSHOT</version>
<!--  packaging:代表项目的打包方式-->
<!--  jar格式:代表java应用  war格式:代表JavaWeb项目-->
  <packaging>war</packaging>

<!--  properities:代表配置-->
  <properties>
    <!--    项目的默认构建编码-->
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <!--    编码版本-->
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>

<!--  dependencies:项目依赖-->
  <dependencies>
    <!--    dependency:具体依赖的jar包配置文件-->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.mortbay.jetty</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.5-20081211</version>
    </dependency>
  </dependencies>

<!--  项目构建用的东西-->
  <build>
    <finalName>javaweb-01-maven</finalName>
    <pluginManagement>
      <plugins>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>

!](https://img-blog.csdnimg.cn/948c53300a4045d8b720fffc7fb08bb8.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_Q1NETiBAQ2Fyc29uJ3MgIGJsb2c=,size_28,color_FFFFFF,t_70,g_se,x_16)

关于在Maven项目中配置资源文件导出问题

标准的Maven项目都会有一个resources目录来存放我们所有的资源配置文件,但是我们往往在项目中不仅仅会把所有的资源配置文件都放在resources中,同时我们也有可能放在项目中的其他位置,那么默认的maven项目构建编译时就不会把我们其他目录下的资源配置文件导出到target目录中,就会导致我们的资源配置文件读取失败,从而导致我们的项目报错出现异常,比如说尤其我们在使用MyBatis框架时,往往Mapper.xml配置文件都会放在dao包中和dao接口类放在一起的,那么执行程序的时候,其中的xml配置文件就一定会读取失败,不会生成到maven的target目录中,所以我们要在项目的pom.xml文件中进行设置,并且我建议大家,每新建一个maven项目,就把该设置导入pom.xml文件中,以防不测!!!

解决方案:

<!--在build中配置resources,来防止我们资源导出失败的问题-->
    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
    </build>

建议大家,每新建一个maven项目,就把该设置导入pom.xml文件中,以防不测!

IDea操作之 生成目录树

在这里插入图片描述

在这里插入图片描述

Maven中父子工程的理解

  1. 构建一个普通的maven项目,删掉里面的src目录,这个就是我们的maven主工程; 在主工程里利用maven新建的model模块,这些模块就是Maven的子工程。
    在这里插入图片描述如上为例
  • javaweb-02-servlet代表的就是Maven父工程
  • 各个模块:request,response,servlet-01,servlet-02等代表各个子工程。
  1. 父项目中的pom.xml中会有对子工程的描述:
<!--父项目中会有关于子模块的modules备注说明-->
    <modules>
        <module>servlet-01</module>
        <module>servlet-02</module>
        <module>response</module>
        <module>request</module>
    </modules>
  1. 子项目的pom.xml中会有对其父项目的描述:
<parent>
        <artifactId>javaweb-02-servlet</artifactId>
        <groupId>com.carson</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
  1. 故子项目可以直接使用父项目中导入的依赖。即(Son extends Father)

IDEA中Maven环境优化

  1. 如果是利用maven创建的web应用,需要修改其web.xml为最新的内容,即修改成如下内容,防止出现问题:
<?xml version="1.0" encoding="UTF-8"?>
  
  <!--    web.xml中是配置我们web应用的核心配置-->
  <!--替换为webapp4.0版本和tomcat一致-->
  <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                        http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
           version="4.0"
           metadata-complete="true">
  </web-app>
  1. 将Maven的结构搭建完整
    (新建java文件夹和resources文件夹,并进行相应文件夹的标记)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    最后完成的结果:
    在这里插入图片描述

Maven项目运行web应用ClassNotFound问题解决

一般我们在以Maven项目为基础创建的Web应用,在pom.xml

虽然已经导入了所有的所需的依赖包,但当启动Tomcat运行Web应用时,会出现ClassNotFound等找不到相关依赖的错误

类似如下错误:
在这里插入图片描述
解决办法:
1.打开Project Structure,选择Artifact,再选择相应的war包
发现WEB-INF目录下只有classes目录。
在这里插入图片描述
2. 选择如下图标,在WEB-INF目录下创建一个lib目录
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3.选中lib目录,再选择+号图标
在这里插入图片描述
再选择Library Files
在这里插入图片描述
全选所有依赖,点击Ok即可。
在这里插入图片描述
最终发现Lib目录下成功多了许多的依赖,这样就不会出现上面那个错误了!!
在这里插入图片描述
问题解决!!!


The End!!创作不易,欢迎点赞/评论!!欢迎关注个人公众号

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值