Maven项目依赖管理 学习笔记

本学习笔记根据慕课视频【Maven项目依赖管理】摘录,主要学习maven的使用方式,从理念到实践、基础到应用,掌握基于maven管理java项目的方式。

目录

第一章 Maven概述

Maven简介

Maven环境搭建

第二章 Maven快速入门 

 Maven项目的创建

第一个依赖和插件

运行项目的两种方式

Batch Model问题

Maven工具和项目的文件结构

Maven基础操作

仓库

maven配置

maven软件坐标

maven操作命令

maven生命周期

手工创建maven项目

MVN命令创建Maven项目

使用工具构建Maven项目

archetype项目骨架加载慢的问题

Maven高手进阶

Maven依赖管理范围

Maven父子项目依赖传递

Maven项目聚合统一管理

Maven项目常见插件

Nexus私有服务器

Maven应用

Maven构建JavaSe项目

Maven构建JavaWEB项目

Maven依赖直接冲突的问题

Maven依赖传递冲突的问题


第一章 Maven概述

Maven简介

Maven :一个用于自动化构建项目和管理项目依赖的工具

自动化构建项目:按照企业中主流的项目模板,创建完善的项目结构

管理项目依赖:配置式添加和管理,自动下载和导入项目依赖

对比:

传统的基于SSM构建的java web项目,第三方jar包需要从网站下载存放到java web项目的WEB-INF的lib目录下。弊端:需要手动下载并存放,如果jar多,导致效率低,容易发生冲突。涉及jar版本更改时不易管理。

使用maven构建的基于SSM构建的java web项目:在pom.xml中添加项目依赖  好处:依赖的jar包只需把依赖信息存在pom.xml中,maven自动完成jar包下载引用。对jar版本更改时修改版本配置并更新即可。

类似于自己去超市购物和网上购物的区别。

Maven环境搭建

MAVEN_HOME :1.x版本需配置。目前主流使用3.x版本,不再需要配置此环境变量

PATH:3.x需配置

M2_HOME:2.x版本配置

1.确认是否配置好java环境

2.下载Maven

访问官方网站,download栏中选择对应的版本进行下载(bin.zip),解压安装。

Maven项目依赖管理 学习笔记_第1张图片

3.配置maven

复制maven的bin文件夹路径(D:\maven\apache-maven-3.6.3\bin)配置到path环境变量。

操作:【此电脑】--【右键属性】--【高级系统设置】--【环境变量】--【系统变量】--【path】--【编辑】--【新建】--【复制粘贴的路径】--【确定】

Maven项目依赖管理 学习笔记_第2张图片

第二章 Maven快速入门 

 Maven项目的创建

此例使用IDEA搭建

1.完成本地maven的初始化配置

    1.在创建项目界面点击configure,settings。

Maven项目依赖管理 学习笔记_第3张图片

     2. 将idea自带的maven改为本地安装的maven(maven home directory-->D:/maven/apache-maven-3.6.3),并把关于maven的配置改为自己配置的(user setting file-->D:\maven\apache-maven-3.6.3\conf\settings.xml),本地仓库根据喜好更改

Maven项目依赖管理 学习笔记_第4张图片

更改后: 

Maven项目依赖管理 学习笔记_第5张图片

2.创建maven项目

    1.【create new project】-- 【maven】--【勾选CREATE FROM 】--[MAVEN WEBAPP]--【NEXT】

Maven项目依赖管理 学习笔记_第6张图片

    2.得到项目信息配置。   name: 项目名    location:项目地址  GroupId:当前项目公司名称   Artifactid:当前项目模块名称  Version:项目版本

Maven项目依赖管理 学习笔记_第7张图片

    next后得到项目信息确认,点击finish完成项目的构建

Maven项目依赖管理 学习笔记_第8张图片

     此时idea会自动连接maven的远程仓库,同步数据到本地并且完成项目的构建

Maven项目依赖管理 学习笔记_第9张图片

第一个依赖和插件

构建web项目时,需要基于servlet,jsp开发,手工构建项目时,需要导入两者的依赖,才能使用它们的jar包,maven项目中怎么实现依赖的导入?不用手动下载,只要找到两个依赖jar包的地址,把地址配置到pom.xml中即可完成依赖的导入。

下面演示servlet和jsp jar包的下载和引用:

    1.访问maven依赖的检索网站,搜索需要的依赖(此例为servlet),点击3.1版本,复制下图红框中的依赖描述到当前项目pom.xml中的dependencies的依赖下面。下载jsp同理

Maven项目依赖管理 学习笔记_第10张图片

 

Maven项目依赖管理 学习笔记_第11张图片

    粘贴进来后点击右上角LOAD MAVEN CHANE图标进行依赖的下载和引用。

Maven项目依赖管理 学习笔记_第12张图片

     若要修改jar包版本,只要更改version 版本并更新即可。

下面演示tomcat插件下载引用

访问maven的官方网站,左侧导航栏选择plugins

Maven项目依赖管理 学习笔记_第13张图片

选择apache tomcat,配置tomcat 7的依赖信息,复制到中完成配置并更新。

Maven项目依赖管理 学习笔记_第14张图片

运行项目的两种方式

  • 使用maven命令运行

1.如下图操作

Maven项目依赖管理 学习笔记_第15张图片

 2.运行项目

会出现项目运行所需下载的资源信息。浏览器中输入地址访问验证项目

Maven项目依赖管理 学习笔记_第16张图片

 

Maven项目依赖管理 学习笔记_第17张图片

  •  把当前的web项目添加到本地的tomcat运行

Maven项目依赖管理 学习笔记_第18张图片

配置本地安装的tomcat,点击OK 

Maven项目依赖管理 学习笔记_第19张图片

 配置完成后需要把项目发布到tomcat中去。点击ok,可以看到项目发布进来了。

Maven项目依赖管理 学习笔记_第20张图片

启动tomcat完成项目的本地启动

Maven项目依赖管理 学习笔记_第21张图片

 个人一开始测试没成功,检查下来发现没有选择本地安装的JDK。Using JRE_HOME:        "D:\intellijidea\IntelliJIDEA\jbr"路径需为本地配置的jre_home。

参考建议:idea 使用tomcat运行maven项目

Batch Model问题

问题:创建Maven项目,挂死在构建项目环节[INFO] GENERATING project in Batch mode

原因:防火墙,阻止/延缓了访问在国外的Maven仓库。

解决:访问Maven 国内镜像仓库

配置:D:\maven\apache-maven-3.6.3\conf\settings.xml

在maven配置文件中添加配置


            aliyun
            aliyun
            central
            
            http://maven.aliyun.com/nexus/content/groups/public/

Maven工具和项目的文件结构

文件结构

Maven项目依赖管理 学习笔记_第22张图片 文件结构

 maven本质的核心是一个下载工具的作用。构建项目时从中央仓库下载模板描述文件,并找到合适的模板完成项目结构的创建,下载依赖插件等到本地仓库,完成本地存储。通过描述文件将本地仓库中已经处理好的依赖插件引入到项目中使用。

主要包括以下目录:

Maven项目依赖管理 学习笔记_第23张图片

bin:存放二进制可执行文件。包括主要的执行命令mvn

boot:存放maven的类加载器。用于加载自身的jar包类库。

conf:存放maven配置文件。包含主要配置文件settigns.xml 

lib:存放自身jar包

uselibs:自定义目录,用于本地仓库使用,方便管理maven中的各种依赖

其他:版本说明文件

 通过maven构建的项目开发结构

Maven项目依赖管理 学习笔记_第24张图片

src:包含项目开发时主要的业务代码。

       main文件夹编写业务代码

                java文件夹存放具体的业务代码,构建包,类型...

                resources存放各种资源文件和配置文件,以及一些静态项目

                webapp:web项目中存在,包含web开发中需要的视图文件

target:存放src总的代码编译后生成的模板二进制文件

pom.xml(project object model:项目对象模型\package object management:依赖包对象管理器)。核心配置文件

Maven基础操作

仓库

远程仓库/中央仓库

用于maven官方服务器中存储各大技术社区和企业开发的软件工具,方遍开发人员在构建项目时从这个仓库统一进行依赖的下载。实际操作中,Maven的远程仓库在国外,国内访问不方便,在国内的一些企业或社区会部署镜像的远程仓库,定时同步maven在国外的中央仓库数据。

本地仓库

开发人员在创建项目时存储项目依赖的本地文件夹。默认存储在:C:/User/用户名/.m2/repository/,实际操作中会通过配置来自定义本地仓库在计算机中的位置。

私有服务器

企业开发项目时大部分依赖会从中央仓库下载,少部分特殊依赖是公司内部开发的一些jar包工具,常规做法是公司内部搭建私有服务器,部署项目依赖,服务公司内部项目。

Maven项目依赖管理 学习笔记_第25张图片

本地仓库和国内镜像仓库可通过编辑配置文件setting.xml来完成指定。

Maven中本地仓库的配置:MAVEN_HOME/conf/settings.xml:localRepository


    D:/maven/apache-maven-3.6.3/usrlibs 

Maven中远程镜像仓库的配置:MAVEN_HOME/conf/settings.xml:mirrors>mirror

 
      aliyun
      aliyun
      central
      
      http://maven.aliyun.com/nexus/content/groups/public/
 

 接下来打开自己的项目查看

File--Setting,可以看到本地仓库的路径已经更新

Maven项目依赖管理 学习笔记_第26张图片

对当前项目做更新,将所有的依赖同步到新的本地仓库。右击项目,选择maven,reload project将依赖导入新的仓库

也可以直接将原仓库的文件内容复制到新仓库文件夹。

 maven配置

Maven核心组件:配置(广度学习即可,随时查用)

全局配置:settings.xml,maven的全局配置文件,主要通过配置的方式管理maven 自身的各项操作,包括对于本地仓库,远程仓库的配置以及认证信息各种配置项。


  
  ${user.home}/.m2/repository

  
  true

  
  false

  
  false
  
  
  
    org.apache.maven.plugins
  

  
  
    
    
      
      server_001
      
      my_login
      
      my_password
      
      ${usr.home}/.ssh/id_dsa
      
      some_passphrase
      
      664
      
      775
    
  

   
    
    
      
      nexus aliyun
      
      Nexus Aliyun
      
      http://downloads.planetmirror.com/pub/maven2
      
      central
    
  

  
    
    
      
      myproxy
      
      true
      
      http
      
      proxy.somewhere.com
      
      8080
      
      proxyuser
      
      somepassword
      
      *.google.com|ibiblio.org
    
  

  
    
      
      test
      
      
      
      
      
      
      
      
    
  


  
    
    env-test
  

  
    
    false
    
    1.5
    
    
      
      Windows XP
      
      Windows
      
      x86
      
      5.1.2600
    
    
    
      
      mavenVersion
      
      2.0.3
    
    
    
      
      ${basedir}/file2.properties
      
      ${basedir}/file1.properties
    
  


  5.2.8



  
  
    
    codehausSnapshots
    
    Codehaus Snapshots
    
    
      
      false
      
      always
      
      warn
    
    
    
      
      
      
    
    
    http://snapshots.maven.codehaus.org/maven2
    
    default
  


配置JDK,在项目构建时默认完成JDK配置


  jdk-1.8

  
    true
    1.8
  

  
    1.8
    1.8
    1.8
  

项目配置:pom.xml

如果配置文件中出现相同的配置项,默认级别pom.xml(项目配置)>setting.xmlnote(用户配置)>settings.xml(全局配置)

  
    
      
      
          
          
          
          
          
          
          
          
      
      
    4.0.0  
      
    asia.banseon  
      
    banseon-maven2  
      
    jar  
      
    1.0-SNAPSHOT  
      
    banseon-maven  
      
    http://www.baidu.com/banseon  
      
    A maven project to study maven. 
      
      
      
      
          
          
              
            Demo  
              
            [email protected]  
              
            [email protected]  
              
            [email protected]  
              
            http://localhost:8080/demo/dev/  
          
      
      
      
          
          
              
            HELLO WORLD  
              
            youname  
              
            [email protected]  
              
              
              
              
                Project Manager  
                Architect  
              
              
            demo  
              
            http://www.xxx.com/  
              
              
                No  
              
              
            +8  
          
      
      
      
          
          
              
              
              
              
              
              
              
              
          
      
      
      
          
          
              
            Apache 2  
              
            http://www.xxxx.com/LICENSE-2.0.txt  
              
            repo  
              
            A business-friendly OSS license  
          
      
      
      
          
          
            scm:svn:http://svn.xxxx.com/maven/xxxxx-maven2-trunk(dao-trunk)     
          
          
          
            scm:svn:http://svn.xxxx.com/maven/dao-trunk     
          
          
          
          
        http://svn.xxxxx.com/  
      
      
      
          
        demo  
          
        http://www.xxxxxx.com/  
      



    
      
      
          
          
      
      
      
          
        jira  
          
        http://jira.xxxx.com/xxxx  
      
      
      
          
          
          
          
          
          
              
              
                  
                  
                  
                  
                  
                  
                  
                  
                  
                  
                  
                
...... ...... Windows XP Windows x64 6.1.7100 mavenVersion 2.0.3 /usr/local/xxxx/xxxx-home/tomcat/maven-guide-zh-to-production/workspace/ /usr/local/xxxx/xxxx-home/tomcat/maven-guide-zh-to-production/workspace/ ...... ...... ...... ...... ...... ...... banseon-repository-proxy banseon-repository-proxy http://10.10.10.123:8080/repository/ default ...... ...... org.apache.maven maven-artifact 3.8.1 jar test spring-core org.springframework true xxx-maven2 xxx maven2 file://${basedir}/target/deploy xxx-maven2 xxx-maven2 Snapshot Repository scp://svn.xxxx.com/xxx:/usr/local/maven-snapshot banseon-site business api website scp://svn.baidu.com/xxx:/var/www/localhost/web

maven软件坐标

基础组件:gav坐标

groupId:项目ID,当前项目和其他项目的唯一标志

artifactId:组件ID,当前项目的子应用或者子组件的唯一标志

version:版本号,迭代开发时标志的产品版本信息

例:

lo4j 1.2.17

org.apache.log4j.Logger

版本号的意义:

软件名称.主版本号.小版本号.阶段版本号.字母版本号

主版本号:软件重大功能新增和修改

小版本号:子版本号,小功能新增和修改

阶段版本号:bug修复和完善

字母版本号:里程碑版本 ALPHA(内测) BETA(公测) RC(后线,即将发行) STABLE(正在发行的稳定版本) RELEASE/R/GA (正在发行的稳定版本) FINAL(最终版本,稳定版本)



    mysql
    mysql-connector-java
    8.0.21

maven操作命令

maven是一个项目构建和管理工具,是基于pom.xml项目对象模型的方式来管理项目的构建过程,依赖注入和报表文档。这些操作maven在底层都是通过命令的方式来执行完成。

Maven项目依赖管理 学习笔记_第27张图片

 mvn --version :查看当前的maven版本

mvn archetype:generate :用于项目构建

mvn clean:清理项目中编译生成的文件数据的命令,清除target目录下生成的文件数据

mvn compile:用户编译项目,将java源代码文件编译成对应的字节码文件,并将编译好的文件存储到package目录中

mvn package:打包编写的项目,生成对应的jar包,存储到package目录中方便后期的部署使用

mvn tomcat :run 使用maven中内置的tomcat插件运行项目

mvn test:自动执行test目录中的测试案例,生成对应的测试报告文档

mvn site:生成报表数据

mvn dependency:tree 查看当前依赖树

mvn insatll: 安装命令,将打包好的jar包添加到本地仓库中,方便其他项目通过坐标引用

mvn deploy:将安装在本地仓库中的jar包发布到私有服务器或镜像仓库,方便其他项目远程通过gav坐标引用

maven生命周期

生命周期:描述项目构建过程  预定义项目执行过程 降低项目管理难度

提供三套独立的生命周期,是maven三种不同的操作模式

clean lifecycle:项目构建之前的清理环节

default lifecycle:项目编译和打包环节

site lifecycle: 项目报告、站点信息、发布环节

Maven项目依赖管理 学习笔记_第28张图片

 手工创建maven项目

底层纯手工构建

Maven项目依赖管理 学习笔记_第29张图片

依次创建上图中的目录文件夹,target文件是mave项目在编译过程中自动创建。在damu 文件夹下新建HelloWorld的java代码。

编写pom.xml文件。配置头从官方网站查询下载(maven.apache.org),documenation部分的user center中getting started guide


  4.0.0
 
  org.example
  trains-02
  1.0-SNAPSHOT


jar



    ...
    ...


在项目的命令行中管理

mvn clean 
mvn compile
mvn package

运行当前的maven项目
mvn exec:java -Dexec.mainClass="com.damu.HelloWorld"

MVN命令创建Maven项目

通过命令使用模板快速构建

Maven项目依赖管理 学习笔记_第30张图片

 3.0.5版本后使用generate命令,添加-D参数

构建过程:在工作空间的命令行中

mvn archetype:generate
        -DgroupId=prg.example
        -DartifactId=trains-03
        -DpackageName=com.example
        -DarchetypeArtifactId=maven-archetype-quickstart

自动生成pom.xml


  4.0.0
  org.example
  trains-03
  jar
  1.0-SNAPSHOT
  trains-03
  http://maven.apache.org
  
    
      junit
      junit
      3.8.1
      test
    
  

运行项目

mvn exec:java -Dexec.mainClass="org.example.App"

使用工具构建Maven项目

开发工具:IDEA

构建环境:jdk 1.8,maven 3.6

构建骨架:archetype-catalog.xml

file--new--project

Maven项目依赖管理 学习笔记_第31张图片

Maven项目依赖管理 学习笔记_第32张图片

Maven项目依赖管理 学习笔记_第33张图片

 完成项目的构建

有两个问题:1.创建项目之初,archetype项目骨架加载慢  2.构建的项目servlet版本是2.3,不利于现阶段web项目开发。需要改造项目骨架。




  Archetype Created Web Application

archetype项目骨架加载慢的问题

官方网站下载archetype-catalog.xml文件(https://repo.maven.apache.org/maven2/archetype-catalog.xml)

文件存放到当前的本地仓库中(D:\maven\apache-maven-3.6.3\usrlibs\org\apache\maven\archetype\archetype-catalog\3.2.0)

重新配置maven  

-DarchetypeCatalog=local

Maven项目依赖管理 学习笔记_第34张图片

自定义archetype项目骨架解决servlet版本问题

使用提供的项目骨架或自定义的项目结构尝试

Maven高手进阶

Maven依赖管理范围

什么是依赖范围 依赖的jar包在maven的生命周期里作用的范围

有哪些依赖范围

Maven项目依赖管理 学习笔记_第35张图片

Maven项目依赖管理 学习笔记_第36张图片

为什么要设置依赖范围

如servlet-api容器相关的依赖,这些依赖在项目开发时在代码中需要引入servlet jar包,但在运行时web容器本身自带了servlet jar包,如tomcat,如果将项目中依赖的servlet打包起来,发布之后在tomcat运行时会和tomcat自带的servlet产生冲突,所以类似servlet,jsp在编译运行的时候引用,发布时不需要添加。

默认依赖范围是complie,所以运行会报错

将范围改为provided,只在运行编译时有效 


      javax.servlet
      javax.servlet-api
      3.1.0
      provided
    

Maven父子项目依赖传递

父子项目:maven中为了合理有效的管理依赖jar包建立的一种项目间的关系

项目间的依赖关系怎么建立

构建父项目mcex01_parent

更改如下

 
    pom

    
        UTF-8
        1.7
        1.7
        4.11
        5.2.8.RELEASE
        1.2.17
    

    
    
        
            junit
            junit
            ${junit.version} 
            test
        
        
            org.springframework
            spring-core
            ${spring.version}
        

        
            org.springframework
            spring-beans
            ${spring.version}
        
    
    
    
    
        
            
                log4j
                log4j
                ${log4j.version}
            
        
    

新建子项目mcex01-wiki

编辑pom.xml

可以看到父项目中写在dependencies中的依赖被默认添加进来了,但写在dependencyManagement中的没有继承进来

>
  
    
    org.example
    mcex01_parent
    1.0-SNAPSHOT
    ../mcex01_parent/pom.xml
  

  
  
  mcex01_wiki
  1.0-SNAPSHOT
 
    
    
      log4j
      log4j
    

 子项目通过parent标签实现对父项目的继承关系,同时父项目中dependencies和dependencymanagement用于统一管理多个子项目中使用的多个jar包的统一版本。通过父项目管理依赖实现多个子项目依赖的复用

Maven项目依赖管理 学习笔记_第37张图片

注意:

  • 父项目的打包方式必须是pom
  • 父子项目,合理有效的复用依赖jar包
  • 子项目相互独立,更加便于敏捷开发和独立管理

父子项目项目之间的系统集成性能较差,如果需要进行统一的部署测试,需要对每个项目进行打包,最后将所有打包结果集成在一起。

Maven项目聚合统一管理

项目聚合:maven中针对多个项目进行统一打包的管理方式。间接的提高了多个项目统一维护管理的便捷性。把多个子项目当成独立的模块,包含到一个整体的项目中,实现多个模块的整合管理。

新建父项目mcex02_aggregation。接下来在父项目中创建多个子项目,此时的子项目以模块的形式出现。点击父项目--new--Module

Maven项目依赖管理 学习笔记_第38张图片

pom.xml 

pom
    
    
    
    
        mcex02_wiki
    

 构建子项目mcex02_aggregation

Maven项目依赖管理 学习笔记_第39张图片

 pom.xml



        mcex02_aggregation
        org.example
        1.0-SNAPSHOT

Maven项目依赖管理 学习笔记_第40张图片

项目聚合关系,项目之间的整体性较高,便于系统集成和维护 。同时结合项目的继承关系,提高依赖的复用性。聚合和继承复合是常用的开发方式。

Maven项目常见插件

maven中的插件是针对maven工具对其功能进行增强型管理的模块。

生命周期插件 resources/source/clean/complie

常用操作插件 tomcat7/denpendency/jar/...

插件在标签中。在maven中需要某个特定的功能时可以考虑是否可以用特定的插件来实现。

常用插件:可在官网查看具体用法

Nexus私有服务器

私有服务器是企业内部为了方便统一管理项目依赖搭建的web服务器

  • 搭建私有服务器

通常在企业中为了合理管理项目依赖,架设私有仓库将项目中的一些公共依赖以及内部私有依赖存放到私有仓库,保证团队内部的依赖共享和敏感依赖的安全性。

构建私有仓库的技术主要有:Apache Archiva,JFrog Artifactory,Sonatype Nexus(主流)

下载Nexus.官方网站

启动私有服务器:nexus /run

第一次启动速度可能慢

Maven项目依赖管理 学习笔记_第41张图片

出现如图所示表示启动完成

 

启动完成后访问本地服务器http://localhost:8081

Maven项目依赖管理 学习笔记_第42张图片

 

  • 创建私有仓库

私有服务器仓库分三种

proxy:代理远程仓库,远程仓库和本地仓库之间的私有仓库

group:仓库分组管理

hosted:发布本地仓库

构建针对中央仓库的私有仓库maven2(proxy)

Maven项目依赖管理 学习笔记_第43张图片

项目中需要连接这个私有仓库可以点击copy来完成

Maven项目依赖管理 学习笔记_第44张图片

 

创建发布仓库maven2(hosted)

Maven项目依赖管理 学习笔记_第45张图片

创建发布快照版本仓库maven2(hosted)

Maven项目依赖管理 学习笔记_第46张图片

 

 

  • 依赖下载和项目发布

创建好的仓库添加到maven项目中

在创建的项目pom.xml中

  
      
      
        my nexus  
        My Nexus  
        http://localhost:8081/repository/my_nexus/                     
          
            ture支持稳定版本的依赖jar包  
          
          
            true  
        /snapshots>  
                      
       
  


  发布管理器
      
        mc-example-release  
        Mc Example Release  
        http://localhost:8081/repository/mc_example_release/  
      
      
        mc-example-snapshot  
        Mc Example Snapshot  
        http://localhost:8081/repository/mc_example_snaoshot/ 
     
 

优先从本地仓库---私有仓库--中央仓库查询依赖

发布项目

连接私有服务器

maven的setting.xml中

 
      mc-example-snapshot
      admin
      配置的密码d.



      mc-example-release
      admin
      配置的密码d.

点击deploy发布项目

Maven应用

Maven构建JavaSE项目

JavaSE项目是使用纯java代码开发的基本应用,构建的过程中需要开发程序的入口类并且指定具体的main方法

IDEA构建基于maven的JavaSE项目

file--new--project,不选骨架直接next,

Maven项目依赖管理 学习笔记_第47张图片

在main的java中新建java class如class文件,在pom.xml中配置依赖如logj。在resourecs中新建log4j定义的配置文件log4j.properties,上log4j官网查询配置信息,最终在hello程序中应用引入的jar包。

JavaSE运行的两种方式

一:当前文件--右键--运行

在控制台直接输出运行结果

二:在edit configure中增加maven运行命令

exec:java -Dexec.mainClass="com.example.HelloWorld"

以maven模式构建并运行当前项目

 

Maven构建JavaWEB项目

以java语言为核心,结合前端、数据库、网络服务器等构建出来的全栈运用。

IDEA构建基于maven的Java Web项目

file--new--project,选择骨架webapp(隐藏底层构建细节)/手工构建,直接next。

手工构建

main下新建文件夹webapp,webapp下新建WEB-INF文件夹,WEB-INF文件夹下新建web.xml核心配置文件

file-project struct--modules--+--web--选择web.xml和webapp的相应路径--create artifacts

Maven项目依赖管理 学习笔记_第48张图片

webapp--右键新建jsp

web项目最终要打成war包,在pom.xml中添加war

javaweb的开发项目需要依赖servlet,servlet是web容器中的jar包,将servlet引入,在pom.xml添加依赖

 
            javax.servlet
            javax.servlet-api
            3.1.0
            provided
 

在java文件夹中新建业务代码

package com.example;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(value = "/hello")
public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().println("hello web");
    }
}

运行一:通过命令项目启动,增加tomcat插件

运行二:使用本地tomcat

Maven依赖直接冲突的问题

 

Maven项目依赖管理 学习笔记_第49张图片

 出现引用的依赖是不同的版本时,通常将最新的版本引入进来(版本向后兼容)

使用依赖树查看依赖关系

排除相冲突的低版本依赖


    g..
    a..
    v..
    
        
            commons-logging
            commons-logging
        
    

Maven依赖传递冲突的问题

Maven项目依赖管理 学习笔记_第50张图片

 模拟:构建项目a,b,c,分别做jar包的打包安装,a依赖b,c,本身的项目A依赖a,可以看到a,b,c都引用进来了,但本身的项目不依赖c


    g..
    a..
    v..
    
        
            
            c
        
    

以上两种冲突的解决方案相同,使用标签

 

 

 

你可能感兴趣的:(maven,maven,java,ssm)