项目管理工具Maven

Maven

Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java 虚拟机,Java 仍是企业和开发人员的首选开发平台。
  

课程内容的介绍

1. Maven基础内容
2. Maven的依赖管理
3. 聚合工程
4. Maven私服搭建
  

一、 Maven基础

1.Maven介绍
1.1为什么需要使用Maven
之前学Spring的时候我们需要单独自己去找相关的jar.这些jar包我们还能通过官网能找到,但是比如我们要找JSTL或者Hibernate验证jar及依赖包的时候我们并不是很容易的找的。所以我们希望有种更加方便管理我们jar的工具,Maven刚好能帮我们解决这个问题。
  
1.2Maven是什么?
官方的解释:
Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。 当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后 Maven 可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。
   
Maven两大核心
1. 依赖管理:就是对jar包的统一管理。
2. 构建项目:项目编码完成后,对项目的编译,测试,打包,部署等操作。
  
初学的时候对Maven的概念比较模糊,仅仅知道它可以管理我们的jar包和jar之间的依赖关系,但它的功能并不仅仅局限于此。我们通过安装使用管理来体验吧。

项目管理工具Maven_第1张图片

    
2. Maven的安装配置
2.1 官网下载
官网地址:https://maven.apache.org/download.cgi
下载Windows版本即可。

项目管理工具Maven_第2张图片

  
2.2 解压缩
将下载的压缩文件解压缩到非中文目录下即可。

项目管理工具Maven_第3张图片

  
2.3 配置Maven的环境变量
先配置MAVEN_HOME

项目管理工具Maven_第4张图片

  
然后将MAVEN_HOME追加到path变量之后。

项目管理工具Maven_第5张图片

  
2.4 验证
环境变量配置好后,我们就可以在系统的任意位置来使用Maven了。

项目管理工具Maven_第6张图片

3.仓库类型介绍

项目管理工具Maven_第7张图片

  
jar包查找的顺序:

项目管理工具Maven_第8张图片

   
中央仓库地址:https://mvnrepository.com
  
4.本地仓库配置
修改我们在Maven安装的配置文件。

项目管理工具Maven_第9张图片

  

项目管理工具Maven_第10张图片

  
修改IDEA中的Maven默认配置。

项目管理工具Maven_第11张图片

  

项目管理工具Maven_第12张图片

  
配置好后需要的jar依赖如果本地仓库没有的话就需要去中央仓库下载,但是中央仓库在国外,速度会很慢,这时我们可以配置镜像服务器,只需要在setting.xml中添加镜像地址即可。


    alimaven
    aliyun maven
    http://maven.aliyun.com/nexus/content/groups/public/
    *
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==
  
配置了阿里云镜像代理后重启IDEA,可以看到新的依赖是通过镜像代理下载的。

项目管理工具Maven_第13张图片

  
5.创建基于Maven的Web项目
5.1 Web项目创建
选择相关的类型。

项目管理工具Maven_第14张图片

  
设置项目的相关信息。

项目管理工具Maven_第15张图片

  
核查Maven的配置信息。

项目管理工具Maven_第16张图片

  

项目管理工具Maven_第17张图片

  
初识项目结构。

项目管理工具Maven_第18张图片

  
我们需要自己手动添加相关的目录结构。

项目管理工具Maven_第19张图片

  

项目管理工具Maven_第20张图片

创建好的最终的目录结构:

项目管理工具Maven_第21张图片

  
5.2 Tomcat插件配置
5.2.1 pom文件中添加配置
      
        org.apache.tomcat.maven
        tomcat7-maven-plugin
        2.2
        
          8080 
          /    
        
      
  

项目管理工具Maven_第22张图片

  
5.2.2 启动Tomcat
选中右侧侧边栏中的Maven点击。

项目管理工具Maven_第23张图片

  

项目管理工具Maven_第24张图片

  
启动成功。

项目管理工具Maven_第25张图片

  
访问成功。

项目管理工具Maven_第26张图片

  

二、依赖管理

Maven项目,依赖,构建配置,以及构件:所有这些都是要建模和表述的对象。这些对象通过一个名为项目对象模型(Project Object Model, POM)的XML文件描述。这个POM告诉Maven它正处理什么类型的项目,如何修改默认的行为来从源码生成输出。同样的方式,一个Java Web应用有一个web.xml文件来描述,配置,及自定义该应用,一个Maven项目则通过一个 pom.xml文件定义。该文件是Maven中一个项目的描述性陈述;也是当Maven构建项目的时候需要理解的一份“地图”。
  
1、Maven坐标

    
        junit
        junit
        4.11
        test
    
   
1.1 dependencies
在dependencies标签中添加需要添加的jar对应的Maven坐标。
  
1.2 dependency
一个dependency标签代表了一个Maven坐标。
   
1.3 groupId
团体、公司、小组、项目、或其他团体标识的体现,约定以创建这个项目的组织域名倒写开头。也是我们在本地仓库中查看依赖的目录结构。一个Maven坐标中是必须有的。
  
1.4 artifactId
在groupId下的表示一个单独的项目的唯一标识。同样是必须的。
  
1.5 version
一个项目的特定版本。也是必须的。
  
1.6 scope
依赖范围。

项目管理工具Maven_第27张图片

  
2、依赖冲突
2.1 冲突产生的根本原因

项目管理工具Maven_第28张图片

  
上图中a jar包通过b和d间接依赖到的c jar包版本不一致,出现了冲突。

项目管理工具Maven_第29张图片

   

项目管理工具Maven_第30张图片

  
2.2 依赖冲突的解决方案
2.2.1 第一优先声明原则
谁先定义就使用谁的。

项目管理工具Maven_第31张图片

  

项目管理工具Maven_第32张图片

  
2.2.2 路径就近原则
直接声明优先级更高。

项目管理工具Maven_第33张图片

  
2.2.3 排除依赖
我们在Maven坐标中可以通过exclusions标签来显示的排除掉简介依赖。

项目管理工具Maven_第34张图片

  

三、聚合工程

所谓聚合项目,实际上就是对项目分模块,互联网项目一般来说按照业务分(订单模块、VIP模块、支付模块、CMS模块…),传统的软件项目,大多采用分层的方式(Dao、Serivce、Controller):
  
1. 聚合工程的结构
bobo-parent pom 管理
    |-- bobo-manager pom 管理
        |-- bobo-manager-dao jar
        |-- bobo-manager-service jar
        |-- bobo-manager-model jar
        |-- bobo-manager-commons jar
        |-- bobo-manager-controller war
  
2.项目结构创建
2.1创建bobo-parent

项目管理工具Maven_第35张图片

  
2.2 创建bobo-manager
这也是一个POM工程,而且是bobo-parent下的一个子工程。

项目管理工具Maven_第36张图片

  
注意创建的module的父工程。

项目管理工具Maven_第37张图片

  

项目管理工具Maven_第38张图片

  

项目管理工具Maven_第39张图片

  
2.3 分别创建4个java工程
创建bobo-manager-dao

项目管理工具Maven_第40张图片

  
创建bobo-manager-service

项目管理工具Maven_第41张图片

  
创建bobo-manager-model

项目管理工具Maven_第42张图片

  
创建bobo-manager-commons

项目管理工具Maven_第43张图片

  

项目管理工具Maven_第44张图片

  
2.4 创建bobo-manager-controller
创建对应的web项目,选择对应的模板

项目管理工具Maven_第45张图片

  

项目管理工具Maven_第46张图片

  
等待初始化完成。

项目管理工具Maven_第47张图片

  
3. 依赖关系
3.1 依赖关系介绍
完整的依赖关系

项目管理工具Maven_第48张图片

  
控制层依赖关系

项目管理工具Maven_第49张图片

  
service层依赖关系

项目管理工具Maven_第50张图片

  
dao层的依赖关系

项目管理工具Maven_第51张图片

  
3.2 项目打包
bobo-parent打包在IDEA中会一性的给所有的子工程都打包。

项目管理工具Maven_第52张图片

  

项目管理工具Maven_第53张图片

  

项目管理工具Maven_第54张图片

  
3.3 依赖关系配置
controller依赖service。那就在Controller的pom文件中添加service的依赖。

  
service依赖dao。在service的pom文件中添加依赖。

项目管理工具Maven_第55张图片

  
dao依赖commons和model两个模块。

项目管理工具Maven_第56张图片

  
完整依赖关系图。

项目管理工具Maven_第57张图片

  
4.聚合工程的运行
4.1 创建UserBean
package com.bobo.model;

public class User {
    private Integer id;
    private String userName;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", userName='" + userName + '\'' +
                '}';
    }
}
  
4.2 创建Dao
package com.bobo.dao;

import com.bobo.model.User;

public interface IUserDao {

    User queryUser();
}
package com.bobo.dao.impl;

import com.bobo.dao.IUserDao;
import com.bobo.model.User;

public class UserDaoImpl implements IUserDao {
    @Override
    public User queryUser() {
        User user = new User();
        user.setId(666);
        user.setUserName("波波");
        return user;
    }
}
  
4.3 创建Service
package com.bobo.service;

import com.bobo.model.User;

public interface IUserService {

    User queryUser();
}
package com.bobo.service.impl;

import com.bobo.dao.IUserDao;
import com.bobo.dao.impl.UserDaoImpl;
import com.bobo.model.User;
import com.bobo.service.IUserService;

public class UserServiceImpl implements IUserService {

    private IUserDao dao = new UserDaoImpl();

    @Override
    public User queryUser() {
        return dao.queryUser();
    }
}
   
4.4 创建Controller
创建Servlet
package com.bobo.servlet;

import com.bobo.model.User;
import com.bobo.service.IUserService;
import com.bobo.service.impl.UserServiceImpl;

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


public class UserServlet extends HttpServlet {

    private IUserService service = new UserServiceImpl();

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        User user = service.queryUser();
        System.out.println(user);
    }
}
  
web.xml的配置



  Archetype Created Web Application
  
  
    userServlet
    com.bobo.servlet.UserServlet
  
  
    userServlet
    /userServlet
  

   
添加Tomcat插件

    
        org.apache.tomcat.maven
        tomcat7-maven-plugin
        2.2
        
            8080 
            / 
        
    
   
4.5 运行
通过Tomcat插件运行。

项目管理工具Maven_第58张图片

  
访问

项目管理工具Maven_第59张图片

  
访问成功说明聚合工程搭建完成!
  

四 私服-Nexus

仓库管理器也叫私服代理仓库
仓库管理器有两个服务目的:首先它的角色是一个高度可配置的介于你的组织与公开Maven仓库之间的代理,其次它为你的组织提供了一个可部署你组织内部生成的构件的地方。
  
1、Nexus介绍
Nexus是一个强大的Maven仓库管理器, 它极大地简化了自己内部仓库的维护和外部仓库的访问。利用Nexus你可以只在一个地方就能够完全控制访问和部署在你所维护仓库中的每个Artifact。Nexus是一套“开箱即用”的系统不需要数据库,它使用文件系统加Lucene来组织数据。 Nexus使用ExtJS来开发界面,利用Restlet来提供完整的REST APIs,通过m2eclipse与Eclipse集成使用。 Nexus支持WebDAV与LDAP安全身份认证。
  
2、Nexus安装
下载安装文件,可以自行去官网下载,也可以获取我提供给大家的源文件。

项目管理工具Maven_第60张图片

  
解压缩到一个非中文目录下即可。

项目管理工具Maven_第61张图片

  
在cmd下切换到Nexus的bin目录下执行 nexus install (以管理员身份进入)。

项目管理工具Maven_第62张图片

  
启动nexus服务 nexus start

项目管理工具Maven_第63张图片

  
测试访问:http://localhost:8081/nexus

项目管理工具Maven_第64张图片

  
默认的账号密码:admin admin123

项目管理工具Maven_第65张图片

  
3、Nexus介绍
3.1 仓库类型

项目管理工具Maven_第66张图片

  
3.2 默认仓库介绍

项目管理工具Maven_第67张图片

  
4、开启远程索引
获取提供给大家的索引文件。

项目管理工具Maven_第68张图片

  
停止Nexus服务。

  
将提供给大家的索引文件覆盖到%Nexus_Home%\sonatype-work\nexus\indexer\central-ctx文件夹下。

项目管理工具Maven_第69张图片

  
重启服务即可。

项目管理工具Maven_第70张图片

  
5、创建宿主仓库

项目管理工具Maven_第71张图片

  

项目管理工具Maven_第72张图片

  

项目管理工具Maven_第73张图片

  
6、创建代理仓库
虽然搭建了私服,但是如果私服中没有我们需要的jar包,它还是会通过默认的代理仓库去中央仓库下载相关的jar。这时速度同样会很慢,这时我们可以在Nexus中添加阿里的代理服务器。

项目管理工具Maven_第74张图片

  
配置的阿里云的镜像地址:http://maven.aliyun.com/nexus/content/groups/public/

项目管理工具Maven_第75张图片

  

项目管理工具Maven_第76张图片

  
7、创建仓库组

项目管理工具Maven_第77张图片

  

项目管理工具Maven_第78张图片

  
8、使用私服
想要在我们自己的Maven项目中关联我们自己配置的私服服务器。
  
在setting配置文件中添加server标签。


    nexus
    admin
    admin123
  

项目管理工具Maven_第79张图片

  
然后在setting配置文件的mirrors标签中添加私服仓库组的配置。


    nexus
    *
    Human Readable Name for this Mirror.
    http://localhost:8081/nexus/content/groups/DpbGroup/
 
9、上传jar包到私服中

项目管理工具Maven_第80张图片

  
修改setting.xml文件。

    releases
    admin
    admin123


    snapshots
    admin
    admin123
  
然后需要修改对应的pom文件。


    
        releases
        http://localhost:8081/nexus/content/repositories/releases/
    
    
        snapshots
        http://localhost:8081/nexus/content/repositories/snapshots/
    
  
执行deploy命令。

项目管理工具Maven_第81张图片

  
在私服中收搜上传的jar包。

项目管理工具Maven_第82张图片

  
10、特定jar包上传
有些第三方的jar包是不存在与Maven的中央仓库中的。那么我们只能将这个jar包上传到Maven私服仓库中。

项目管理工具Maven_第83张图片

  

项目管理工具Maven_第84张图片

  
最后不要忘了 点击 Upload Artifact(s) 按钮。

项目管理工具Maven_第85张图片

  
11、从私服下载jar包
setting.xml文件中配置模板。

    dev
    
        
            nexus
            http://localhost:8081/nexus/content/groups/BoboGroup/
            
            
                true
            
            
            
                true
            
        
    

    
        
            public
            Public_Repositories
            http://localhost:8081/nexus/content/groups/BoboGroup/
        
    
  
激活模板。


    dev
  

项目管理工具Maven_第86张图片

  
如果这样设置还是不能下载snapshots版本的依赖,那就在pom中添加如下的配置。

    
        BoboGroup
        http://localhost:8081/nexus/content/groups/BoboGroup/
        
        
            true
        
        
        
            true
        
    
  
效果如下。

项目管理工具Maven_第87张图片

你可能感兴趣的:(企业化工程技术,maven,java)