前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JavaWeb——Maven基础之详细总结,从零开始搭建Maven工程,包含一些常见的坑org.eclipse.jdt.internal.compiler.classfmt.ClassFormatEx

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

作者头像
Winter_world
发布2020-09-25 10:53:08
8900
发布2020-09-25 10:53:08
举报

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

代码语言:javascript
复制
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 即可解决。

代码语言:javascript
复制
<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>

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

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

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

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-08-26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 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工程
        相关产品与服务
        项目管理
        CODING 项目管理(CODING Project Management,CODING-PM)工具包含迭代管理、需求管理、任务管理、缺陷管理、文件/wiki 等功能,适用于研发团队进行项目管理或敏捷开发实践。结合敏捷研发理念,帮助您对产品进行迭代规划,让每个迭代中的需求、任务、缺陷无障碍沟通流转, 让项目开发过程风险可控,达到可持续性快速迭代。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档