JavaWeb——Maven基础之详细总结,从零开始搭建Maven工程,包含一些常见的坑org.eclipse.jdt.internal.compiler.classfmt.ClassFormatEx

本文深入解析Maven作为项目管理工具的核心概念,包括依赖管理、生命周期、概念模型及工程创建流程,阐述如何利用Maven简化Java项目构建,管理jar包,自动运行单元测试,打包并部署项目。

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

目录

1 Maven概述

1.1 Maven的基本概念

1.2 Maven的安装

1.3 Maven仓库种类和彼此关系

1.4 Maven标准目录机构

2 Maven常用命令

3 Maven生命周期

4 Maven概念模型

5 创建Maven工程

5.1 IDEA集成Maven插件

5.2 使用IDEA创建Maven的Java工程

5.3 使用IDEA创建Maven的Web工程


1 Maven概述

1.1 Maven的基本概念

Maven 是一个项目管理工具,它包含了一个项目对象模型 (POM: Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。

上述关于Maven的概念看起来晦涩难懂,那么Maven到底能帮助我们做什么呢?

  • 1)大项目涉及的jar包手动导入存在的jar包冲突,版本冲突问题;
  • 2)将Java文件编译成二进制字节码文件;
  • 3)可以将指定目录下的单元测试一下全部完成,且指示哪里OK,哪里有问题;
  • 4)项目打包方便;

总之,Maven可以把你从一些繁琐工作中解放出来,能帮你构建工程,管理 jar包,编译代码,还能帮你自动运行单元测试,打包,生成报表,甚至能帮你部署项目,生成 Web 站点。

其中,Maven的最经典的作用包括:

1)依赖管理,就是Maven工程对jar包的管理,传统项目中直接将jar包放在项目中,而Maven工程真正的jar包是放在jar包仓库中,项目中存在的是jar包的坐标,当编译时是通过坐标去仓库中寻找jar包的。所以,使用Maven的项目文件大小要比传统的项目文件大小小的多。

2)一键构建,即不再使用本地安装的Tomcat,而是使用Maven集成的Tomcat插件完成,使用Maven的规范化流程如下:

若使用前者,我们需要先把整个项目打包,放在Tomcat目录下的webapp文件夹下,然后在bin目录下找到startup命令双击运行,使用Maven的话就简单的多了,一键完成:cmd命令进入到项目目录下,再mvn tomcat:run 即可。

1.2 Maven的安装

安装步骤:

  • 1)官网下载安装包:http://archive.apache.org/dist/maven/maven-3/
  • 2)下载的安装包解压在一个没有中文、没有空格的路径下即可;
  • 3)配置环境变量:
    ----在系统变量中新建一个MAVEN_HOME,变量值为解压后的文件目录:自己的文件目录\apache-maven-3.5.2
    ----在系统变量中找到Path,新增变量值%MAVEN_HOME%\bin;
    ----因为Maven运行依赖于Java环境,所以需要确保环境变量中有JAVA_HOME,变量值为JDK的目录;
  • 4)检验Maven是否按照OK,cmd中输入mvn -v:

解压后的Maven文件目录如下:

1.3 Maven仓库种类和彼此关系

仓库种类包括:本地仓库、中心仓库、远程仓库(私服)。

  • 1)本地仓库:打开Maven-conf目录下的settings.xml,可以看到localRepository的注解:Default: ${user.home}/.m2/repository,即Maven本地仓库的默认位置是系统盘下的路径;
  • 2)中央仓库:启动Maven工程时,先通过jar包坐标在本地仓库寻找jar包,若本地没有,在联网的情况下会去中央仓库下载,未联网的情况下因找不到jar包会报错。中央仓库放置了几乎所有的开源jar包;
  • 3)远程仓库:实际企业项目开发时,为了方便管理,且未联网的情况下也正常开发,会创建一个远程仓库,别名为私服。公司可以通过局域网从远程仓库获取jar包。远程仓库的jar包可以是本地上传的,也可以是从中央仓库下载的。

【注意】:一般在本地电脑,我们通常会把本地仓库默认指定的路径(在C盘)修改到其他盘中,避免占用系统盘大量空间且维护方便,修改方法:settings.xml文件中,  <localRepository>本地仓库的路径</localRepository>

1.4 Maven标准目录机构

一般情况下,我们项目中代码包括几部分:

  • 核心代码部分;
  • 配置文件部分;
  • 测试代码部分;
  • 测试配置文件;

对于传统项目,针对以上四部分可能会放在不同的包中,但是不同的程序员命名规则就会不一样,所以Maven统一了这个规范:

  • src/main/java目录:核心代码部分;
  • src/main/resources:配置文件部分;
  • src/test/hava目录:测试代码部分;
  • src/test/resources:测试配置文件。
  • src/main/webapp:页面资源,包含js、css、图片等。

2 Maven常用命令

以一个简单的项目为例说明,进入到项目路径下,打开cmd

1)mvn clean:删除编译文件target,在接收一个已经开发了的项目A时,首先要clean一下,因为每个人的开发环境不同,所以要删除掉原来的编译信息;

2)mvn compile:编译src/main目录下的代码,结果放在target目录下;

3)mvn test:不仅编译src/main下代码,也编译src/test下的代码

4)mvn package:不仅编译src/main下代码,也编译src/test下的代码,且打了war包

5)mvn install:不仅编译src/main下代码,也编译src/test下的代码,且打了war包,此外,把当前项目的jar包存在了本地仓库。

3 Maven生命周期

Maven的一键构建是利用其集成的Tomcat插件进行的,构建步骤包括:编译->测试->打包->安装->发布,若接着其他人开发的项目,首先还要进行项目编译信息清除。由上一节讲到的5个命令可知,从前到后执行的范围是逐级包含的,实质上这就是生命周期,Maven有三套生命周期:

  • 清理生命周期;
  • 默认生命周期;
  • 站点生命周期(不常用)。

4 Maven概念模型

1)项目对象模型

对应着项目中的pom.xml文件,包含的信息有三类:

  • 项目自身的信息;
  • 项目运行依赖的jar包信息;
  • 项目运行环境信息,如jdk、tomcat等信息。

2)依赖管理模型

pom.xml中的项目运行依赖的jar包坐标,包含:

  • 公司组织的名称;
  • 项目名;
  • 版本号

3)构建生命周期

最常用的是默认生命周期:compile、test、package、install、deploy,每一个构建项目的命令对应着maven底层的一个插件。

5 创建Maven工程

5.1 IDEA集成Maven插件

IDEA集成Maven插件的步骤:

1)首先要保证电脑已经安装好了Maven;

2)在IDEA->Settings->Maven(可直接搜索)设置Maven的安装路径、配置文件路径、本地仓库路径:

3)在IDEA->Settings->Maven(可直接搜索)->Runner,设置VM-Options,若使用Maven提供的好的骨架创建Maven工程时,需要联网,为了不联网情况下也可以成功创建,那么配置此参数,只要之前有联网下载过相关创建工程的插件,在本地寻找即可,参数为:-DarchetypeCatalog=internal

5.2 使用IDEA创建Maven的Java工程

1)新建Maven工程,参数选择如下,quickstart为maven java工程 的一个骨架(模板),首次使用要联网下载的(这里若是新建工程后出现错误,基本是没有FQ,因为是从国外网站下载的);

2)设置Maven的路径;

3)补充目录结构(resources)

【注意】:若不使用骨架,实际创建出的跟使用骨架的差不多,resources目录也直接有了,只是缺失java目录下,可以自己创建,我们使用maven创建java工程时可以不使用骨架。

5.3 使用IDEA创建Maven的Web工程

以新建一个Servlet为例,新手也可以按步骤搭建自己的环境的。

1)新建Maven工程,参数选择如下,相比于Java工程,只是骨架不同而已,后续步骤一样,不再赘述。

2)补充目录结构(src/main/java,右键Make Directory As Resource Root,高版本的IDEA右键直接可以选择新建java目录),在java目录下新建com.winter.servlet包

3)在Project Structure-》Modules-》web-》Source Roots处勾选,否则会出现,New 时缺失Servlet等选项的问题。

4)在com.winter.servlet包下新建一个Servlet,新建后web.xml会出现error提示,需要自己补全mapping。

5)查看新建的Servlet,发现缺失Servlet包错误,因为是新建的工程,需要在pom.xml文件中导入jar包(<dependencies>标签),先删掉前面的路径,pom文件中导入后即可,此处导入了servlet、junit、jsp包

【注意】:若本地仓库没有对应的jar包,可以从maven中央仓库搜索,获取坐标后粘贴进pom文件

6)完成Servlet代码,实现跳转至hello.jsp界面

public class MyServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws javax.servlet.ServletException, IOException {
        this.doGet(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws javax.servlet.ServletException, IOException {
        request.getRequestDispatcher("/hello.jsp").forward(request,response);
    }
}

7)运行项目:mvn tomcat:run,如下操作

【注意1】:访问网页时却出现如下问题,原因是什么呢?

【原因】:在项目编译的时候用的是我们导入的jar包,但在真正运行的时候是调用本地的tomcat里面的jar包,发生了冲突。

【解决办法】:在pom.xml文件中,<dependecy>标签对应的jar包加作用域,近让其在编译的时候起作用,而项目运行的时候不起作用即可:<scope>provided</scope>

【注意】:作用域的设置可以参照下表

修改完后再次启动,访问时就正常了,记着自己写一个hello.jsp哦。

【注意2】:若启动服务器没问题,访问网页时出现这样的错误,可能是因为Maven默认的Tomcat版本太低了;

【解决办法】:pom.xml中添加插件配置为Tomcat7,再次启动时需要输入的指令为mvn tomcat7:run 即可解决。

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.tomcat.maven</groupId>
            <artifactId>tomcat7-maven-plugin</artifactId>
            <version>2.2</version>
            <configuration>
                <port>8080</port> 
                <uriEncoding>UTF-8</uriEncoding>
            </configuration>
        </plugin>
    </plugins>
</build>

作于202008262000,已归档

———————————————————————————————————

本文为博主原创文章,转载请注明出处!

若本文对您有帮助,轻抬您发财的小手,关注/评论/点赞/收藏,就是对我最大的支持!

祝君升职加薪,鹏程万里!

<think>嗯,用户现在想下载JDK 8来完成JavaWeb实验环境搭建,并且需要配置到IntelliJ IDEA 2020.12和Tomcat 8.5.5中。之前用户提到在实验中遇到了版本兼容性问题,特别是Java 17和Tomcat 8.5.5之间的冲突,可能参考了之前的回答中的解决方法,比如添加启动参数或者替换编译器。现在用户可能因为实验要求或者项目依赖需要降级到JDK 8,所以需要指导如何正确下载和配置。 首先,用户需要下载JDK 8的最新版本。根据引用[1]中的信息,用户可能之前遇到过版本不兼容的问题,比如“Error: java 不支持发行版本5”,这时候可能需要调整项目的语言级别或者JDK版本。因此,确保用户下载正确的JDK 8版本是关键,比如JDK 8u401,这是Oracle最新的更新版本,但需要注意Oracle的许可协议变化,可能推荐使用OpenJDK的版本如AdoptOpenJDK或Amazon Corretto,以避免潜在的许可问题。 接下来是配置IntelliJ IDEA 2020.12。用户之前可能已经配置过JDK 17,现在需要添加JDK 8作为新的SDK。这里需要指导用户如何在IDEA中添加JDK 8的路径,并设置项目级别的语言和SDK。同时,需要注意Tomcat 8.5.5与JDK 8的兼容性,Tomcat 8.5.x通常支持Java 8到Java 11,因此JDK 8应该是兼容的。不过,用户可能在配置Tomcat时遇到问题,比如启动参数或者JSP编译错误,这时候需要参考之前提到的解决方法,比如修改web.xml或调整编译器版本。 另外,用户可能没有注意到项目模块配置中的语言级别,这会导致编译错误。需要提醒用户检查项目的语言级别是否为8,并确保模块配置中也使用JDK 8。同时,Maven或Gradle项目中的配置也需要相应调整,比如pom.xml中的source和target版本,避免使用更高版本的插件。 在测试部分,用户需要验证配置是否正确,比如创建简单的Servlet和JSP页面,检查是否有编译错误或运行时问题。如果遇到问题,可能需要检查环境变量、项目配置或Tomcat的设置,确保所有环节都正确指向JDK 8。 用户可能还关心如何解决常见的兼容性问题,比如JSP编译错误或启动参数的问题,这时候需要提供具体的解决方案,如替换jasper-jdt编译器版本或者添加必要的JVM参数。此外,用户可能希望了解如何切换回JDK 17(如果需要的话),所以提供相关步骤也是有帮助的。 最后,用户可能需要一些常见问题的解答,比如如何处理版本冲突,或者如何确认JDK配置成功。这些问题应该在回答中提前考虑到,并提供解决方案,帮助用户顺利完成环境搭建。</think>### JDK 8下载与配置指南(IntelliJ IDEA 2020.12 + Tomcat 8.5.5) --- #### **一、JDK 8下载** 1. **推荐版本选择** - **Oracle JDK 8u401**(需注册Oracle账号):[下载链接](https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html) - **OpenJDK 8**(免费开源):推荐使用AdoptOpenJDK或Amazon Corretto:[下载链接](https://adoptium.net/temurin/releases/?version=8) > 注:Oracle JDK 8u201后需商业许可,建议优先选择OpenJDK[^1] 2. **安装验证** 命令行输入以下命令验证安装: ```bash java -version # 应显示类似 "1.8.0_401" ``` --- #### **二、IntelliJ IDEA配置** 1. **设置全局JDK** - 打开IDEA > `File > Project Structure > SDKs` - 点击`+ > Add JDK`,选择JDK 8安装目录(如`C:\Program Files\Java\jdk1.8.0_401`) 2. **配置项目SDK** - `Project Structure > Project Settings > Project` - 设置`Project SDK`为JDK 8 - 修改`Project language level`为`8 - Lambdas, type annotations etc.` 3. **模块配置** - `Project Structure > Modules` - 确保所有模块的`Language level`为8 - 检查依赖库是否兼容JDK 8(如Tomcat 8.5.5的`servlet-api`) --- #### **三、Tomcat 8.5.5兼容性配置** 1. **修改Tomcat启动参数** - 在IDEA中打开`Run/Debug Configurations` - 在Tomcat配置的`VM options`添加: ```bash -Djava.version=1.8 --add-opens java.base/java.lang=ALL-UNNAMED ``` 2. **解决JSP编译错误** - 若报错`Unsupported major.minor version 52.0`,需更新Tomcat的JSP编译器: - 下载`jasper-jdt-8.5.5.jar`替换Tomcat的`lib/jasper-jdt.jar`[^1] --- #### **四、环境验证** 1. **创建测试Servlet** ```java @WebServlet("/test") public class TestServlet extends HttpServlet { protected void doGet(HttpServletRequest req, HttpServletResponse resp) { resp.getWriter().print("JDK Version: " + System.getProperty("java.version")); } } ``` - 访问`http://localhost:8080/test`应显示`JDK Version: 1.8.0_401` 2. **检查构建输出** - 在IDEA的`Build`输出中确认: ```text Compiling with JDK 8 (1.8.0_401) ``` --- #### **五、常见问题解决** 1. **错误:`java.lang.UnsupportedClassVersionError`** - **原因**:Tomcat使用JDK 17编译,但项目配置为JDK 8 - **解决**:在`Project Structure > Modules`中检查所有模块的`Target bytecode version`是否为8 2. **Maven项目兼容性** - 在`pom.xml`中指定JDK 8: ```xml <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> ``` --- ### 配置对比表 | 组件 | 原配置(JDK 17) | 新配置(JDK 8) | |----------------|-------------------------|-------------------------| | **Project SDK** | Java 17 | Java 8 | | **Tomcat JVM** | 需添加模块化参数 | 仅需兼容性参数 | | **编译输出** | Class文件版本61 (Java 17) | Class文件版本52 (Java 8) | --- ### 相关问题 1. 如何在同一个IDEA中管理多个JDK版本? 2. Tomcat 8.5.x是否支持Java 11? 3. 如何解决Maven项目中的跨版本依赖冲突?
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Winter_world

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值