maven

一、项目分层

1.1表示层

  • 视图层
    h5/css/js/jsp
  • 控制层
    servlet/Action/Handler
    负责接收请求参数,处理请求,返回响应,跳转页面

1.2业务逻辑层

Spring IOC AOP

1.3 持久化层

调用数据库

JDBC/DBUtils/Spring JDBCTemplate/Hibernate(常用)/Mybatis Mys

二、当前项目村存在的问题

2.1 问题

  • 一个项目就是一个工程
    项目太大用package划分太麻烦,太多,不好管理,最好是每一个模块对应一个工程借助maven将一个maven划分成多个模块
  • 需要手动复制粘贴jar包
    同样的jar包出现在不同的项目工程中,浪费存储空间,借助maven,将jar包存在仓库中,需要使用的工程引用这个文件接口即可。并不需要去复制。
  • 一个jar包依赖的其他jar包需要我们手动添加
    jar包需要别人为我们准备好,或者去官网下载,不同技术的官网痛过maven或者svn等专门工具提供下载的,借助于Maven我们可以以一种规范的方式下载jar包,因为所有知名框架或第三方工具的jar包以及按照统一的规范存放在Maven的中央仓库中。

Tips:统一的规范

三、Maven

3.1 概念

maven是一个项目管理工具

  • 依赖管理
    maven对项目中的jar包进行管理。把jar包放到仓库中,项目中只放jar包的坐标。
  • 一键构建
    maven自身集成了tomcat插件,可以对项目进行编译,测试,打包,安装,发布等操作。

3.2 构建

  • 概念:以“java源文件”,“框架配置文件”,“JSP”,“HTML”,"图片“等资源作为原材料,去生产一个可以运行的项目的过程。
    编译
    部署
    搭建
  • 编译:java源文件–>编译–>class字节码文件–>交给jvm去执行
  • 部署:一个BS项目最终运行的不是动态web本身,而是这个web工"程编译的结果",当我们需要通过浏览器访问java程序时就必须将包含java程序的web工程编译的结果拿到服务器上的指定目录下,并启动服务器才行,这个拿的过程我们叫做部署。

3.3 构建过程中的各个环节

  • 清理
    将以前编译得到旧的class字节码删除,为下一次编译做准备
  • 编译
    将Java源程序编译成class字节码文件
  • 测试
    自动测试,自动调用jUnit程序
  • 报告
    测试程序执行的结果
  • 打包
    动态web工程打包,java工程打包
  • 安装
    Maven特定的概念,将打包得到的文件复制到“仓库中”指定的位置
  • 部署
    将动态Web工程生成的war包复制到servlet容器指定的目录下,使其可以运行

3.4 自动化构建

3.5 安装Maven核心程序

  • 检查java_home环境变量
    在这里插入图片描述

  • 解压Maven程序核心的压缩包,放在非中文无空格的路径下

  • 配置Maven环境变量
    MAVEN_HOME

  • 运行mvn -v查看maven版本
    在这里插入图片描述

3.6 Maven的核心概念

  • 约定的目录结构
  • POM
  • 坐标
  • 仓库
  • 生命周期/插件/目标
  • 继承
  • 聚合

3.7 第一个Maven工程

创建约定的目录结构

  • 根目录:工程名
  • src目录:源码
  • pom.xml文件:Maven工程的核心配置文件
  • main目录:存放主程序
  • test目录:存放测试程序
  • java目录:存放java源文件
  • resources目录:存放框架或其他工具的配置文件

3.8 常用Maven命令

注意:
执行与构建过程相关的Maven命令,必须进入pom.xml所在的目录,与构建过程相关:编译,测试,打包…

mvn clean清理
mvn compile编译
mvn test-compile编译测试程序
mvn test执行测试
mvn package打包
  • package

将项目打包到target目录下。

  • install
    将包安装到本地仓库
  • deploy
    本地做好的项目打包上传到私服

3.9 联网的问题

  • Maven的核心程序中仅仅定义了抽象的生命周期,但是具体的工作必须由特定的插件来完成,而插件本身并不在Maven的核心程序中。
  • 执行的Maven命令需要用到某些插件时,Maven核心程序会首先到本地仓库中查找
  • 本地仓库默认的位置:系统中当前用户的家目录:.m2\repository,比如:
C:\Users\ybx\.m2\repository
  • Maven核心程序如果在本地仓库中找不到需要的插件,那么他会自动连接外网,到中央仓库中下载
  • 如果连接网络失败,构建失败
  • 修改本地仓库默认的位置可以让Maven核心程序到我们事先准备好的目录下查找文件
    找到maven解压目录\conf\setting.xml
    在setting.xml文件中找到
    将标签体内容修改为已经准备好的Maven仓库目录
 <localRepository>D:\software\config\RepMaven.zip</localRepository>

3.10 POM

  • Project Object Model
    项目对象模型
  • pom.xml对于Maven工程是核心配置文件,与构建过程相关的一切设置都在这个文件中进行配置,重要程度相当于web.xml对于动态web工程。

3.11 坐标(GAV)

用三个向量在仓库中定位一个工程

  • groupid :公司或组织于明+项目名
  • artifactid:模块名
  • version:版本名

Maven工程的坐标与仓库中路径的对应关系

3.12 仓库

  • 仓库的分类
  • 本地仓库
    当前电脑上部署的仓库目录,为当前电脑上所有Maven工程服务。

  • 远程仓库
    私服:假设在当前局域网环境下,为当前局域网范围内的所有Maven服务。链接外网下载jia包存储到私服上,供多个用户使用。

  • 中央仓库:架设在Internet上,为全世界Maven工程服务
    中央仓库镜像:为了分担中央仓库的流量,提高用户访问速度。

  • 仓库中保存的内容
  • Maven自身所需要的插件
  • 第三方框或者工具的jar包。
  • 我们自己开发的Maven工程
  • 仓库之间的关系

在公司中,如果本地没有对应的jar包,会先从私服中去寻找jar包,如果私服(远程仓库)中没有,会从中央仓库中下下载,也可以从本地上传。

  • 第三方
  • 第一方:jdk
  • 第二方:我们
  • 软件版本阶段说明:https://www.cnblogs.com/lanmiao/articles/2184282.html

按住shift–>鼠标右键在此处打开cmd,直接定位到当前目录下

3.13 依赖

  • Maven解析依赖信息时,会到本地仓库中查找被依赖的jar包,对于我们自己开发的Maven工程,使用Install命令安装后就可以进入仓库。

  • 依赖的范围

    compile

    • 对主程序是否有效:有效
    • 对测试程序是否有效:有效
    • 是否参与打包:参与打包
  • test范围依赖

    • 对主程序是否有效:无效
    • 对测试程序是否有效:有效
    • 是否参与打包:不参与打包
      *典型的例子:junit
  • provided范围依赖

    • 对主程序是否有效:有效
    • 对测试程序是否有效:有效
    • 是否参与打包:不参与打包
    • 是否参与部署:不参与部署
    • 典型的例子:servlet.api.jar

3.14 生命周期

  • 清理生命周期
  • 默认生命周期
    compile到deploy过程
  • 站点生命周期

四、一些其他配置

4.1 使用阿里云镜像

config–>setting.xml

   <mirror> 
     <id>alimaven</id> 
     <name>aliyun maven</name> 
     <url>http://maven.aliyun.com/nexus/content/groups/public/</url> 
     <mirrorOf>central</mirrorOf> 
     </mirror> 

4. 2 配置本地仓库

 <localRepository>D:\software\config\RepMaven</localRepository>

4.3 引用中央仓库地址

百度Maven中央仓库–>搜索servlet–>随便粘贴一个版本,实例如下:

<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1-b03</version>
    <scope>provided</scope>
</dependency>

五、idea下创建Maven项目

5.1 执行Maven命令

Maven Projects–>Lifecycle
在这里插入图片描述

5.2 执行其他命令

在这里插入图片描述

5.3 jar包冲突

我们导入的包与Maven中自带的包冲突了,我们只需在编译时期使用我们调导入的包,我们可以设置jar包的作用域,provide作用域的作用是让jar包在编译时期起作用,在项目实际运行时不起作用。junit让他只在测试时起作用。

六、出错

context: /jsf2nd
  delegate: false
  repositories:
    /WEB-INF/classes/
----------> Parent Classloader:
org.apache.catalina.loader.StandardClassLoader@1172e08
 javax.faces.webapp.FacesServlet
java.lang.ClassNotFoundException: javax.faces.webapp.FacesServlet
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
	at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1128)
	at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1026)
	at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4421)
	at org.apache.catalina.core.StandardContext.start(StandardContext.java:4734=
	

原因:servlet文件没有放在java目录下,而是放在了其他目录下

七、其他配置

7.1 配置tomact7,并改变端口

<plugins>
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.2</version>
        <configuration>
          <port>8844</port>
        </configuration>
      </plugin>
    </plugins>

7.2 idea下创建tomcat7模板

  • file–>settings–>搜索live
    在这里插入代码片

  • 右边加号–>template group(创建组名)–>live template(创建动态模板)
    在这里插入图片描述

  • 创建好模板后,选择模板生效的文件类型,选Define,再选文件类型即可

  • 在对应文件中写上模板名,就可以自动调用

7.4 配置jdk1.8插件

<plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <configuration>
            <target>1.8</target>
            <source>1.8</source>
            <encoding>utf-8</encoding>
          </configuration>
        </plugin>

7.5 xml头部文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
          http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
          version="3.0">    
</web-app>

八、maven工程解决jar包冲突问题

8.1 方式一

第一声明优先原则

8.2 常见面试题

搞懂这7个Maven问题,带你吊打面试官!

8.3 新版本maven

  • 新版本maven可能会版本不兼容,建议使用低版本的maven。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值