您当前的位置: 首页 >  Java

彭世瑜

暂无认证

  • 0浏览

    0关注

    2791博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Java笔记:Maven软件依赖管理

彭世瑜 发布时间:2020-12-23 22:45:10 ,浏览量:0

Maven软件依赖管理 大纲
  1. 快速入门

    • 环境搭建
    • IDEA创建项目
    • 目录结构分析
  2. 高手进阶

    • repository仓库解析
    • pom.xml配置详解
    • GAV软件定位坐标
    • mvn命令 & 生命周期
    • maven项目手工构建
    • maven项目自动构建
  3. 高级应用

    • 依赖范围解析
    • 项目继承下的依赖
    • 项目聚合下的依赖
    • 项目常用插件配置
    • 私有服务器管理
  4. 应用拓展

    • 基础应用:Java SE项目
    • 应用升级:Java WEB项目
    • 应用拓展:SSM项目构建
    • 应用拓展:SpringBoot项目
    • 应用拓展:测试项目应用
概述

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

环境搭建 1、 JDK Java Development Kit JAVA_HOME CLASSPATH PATH

$ java -version
java version "1.8.0_251"

2、 Maven MAVEN_HOME version1 M2_HOME version2 PATH version3

下载地址 https://maven.apache.org/

配置环境变量

vim ~/.bash_profile

# maven
export MAVEN_HOME=/Users/Applications/apache-maven-3.6.3
export PATH=$PATH:$MAVEN_HOME/bin

查看maven版本

$ mvn -version
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)

3、 IDEA

Maven创建项目

配置IDEA的Maven路径,选择自定义安装的路径

1、快速构建web项目 选择Maven项目 maven-archetype-webapp

2、管理Maven依赖,分析依赖关系

搜索依赖地址:https://mvnrepository.com/

pom.xml添加依赖


    
      javax.servlet
      javax.servlet-api
      3.1.0
      provided
    

    
      javax.servlet.jsp
      javax.servlet.jsp-api
      2.2.1
      provided
    

插件列表:https://maven.apache.org/plugins/index.html

pom.xml添加插件


    
        
            
              org.apache.tomcat.maven
              tomcat7-maven-plugin
              2.2
            
        
    

3、运行项目,检测Maven项目

(1)Maven

运行命令

$ mvn tomcat7:run

可以配置到启动命令

选择Maven -> Command line添加tomcat7:run

(2)添加到Tomcat

配置启动命令

选择Tomcat -> Deployment -> Artifact

4、防火墙影响访问国外仓库: [Info] Generating project in Batch mode

配置阿里云中央仓库

https://maven.aliyun.com/mvn/guide

$ vim ~/.m2/settings.xml

    
      aliyunmaven
      *
      阿里云公共仓库
      https://maven.aliyun.com/repository/public
    

项目结构

.
├── pom.xml
├── src               # source
│   └── main
│       ├── java      # 业务代码
│       ├── resources # 资源文件
│       └── webapp
│           ├── WEB-INF
│           │   └── web.xml
│           └── index.jsp
└── target            # 目标文件 

pom.xml project object model 项目对象模型 package object management 依赖包对象管理器

Maven基础操作

1、仓库 Repository

配置文件默认路径:~/.m2/settings.xml

  1. 远程仓库/中央仓库/国内镜像仓库

    alimaven
    central
    aliyun maven
    https://maven.aliyun.com/repository/public

  1. 本地仓库
~/.m2/repository
  1. 私有服务器
Maven配置

全局配置 settings.xml


    
    ${user.home}/.m2/repository

    
    true

    
    false

    
    false
  
    
    

    
    

    
    

    
    

    

    

    

    

    


jdk1.8_profile.xml


    
      jdk-1.8

      
        true
        1.8
      

      
        1.8
        1.8
        1.8
      
    

项目配置 pom.xml

  








优先级 :

项目配置pom.xml > 用户配置settings.xmlnote > 全局配置settings.xml

完整配置: Maven: settings.xml、pom.xml完整配置

GAV坐标

版本号:

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

字母版本号: alpha 内测版 beta 公测版 rc 候选版 stable 稳定版 release/r/ga 发布版 final 最终版

Maven命令操作

1、项目构建命令

mvn --version
mvn archetype:generate

2、项目清理、编译、打包

mvn clean
mvn compile
mvn package

3、项目运行、测试、发布

mvn tomcat:run
mvn test
mvn site
mvn dependency:tree
mvn install
mvn deploy
Maven生命周期

clean lifecycle 项目构建之前的清理环节 default lifecycle 项目编译和打包环节 site lifecycle 项目报告,站点信息,发布环节

构建Maven项目

1、手工构建Maven项目

项目结构

$ tree
.
├── pom.xml
└── src
    ├── main
    │   ├── java
    │   │   └── com
    │   │       └── demo
    │   │           └── Hello.java
    │   └── resources
    └── test
        ├── java
        │   └── com
        │       └── demo
        └── resources

pom.xml文件 https://maven.apache.org/guides/getting-started/index.html


  4.0.0
 
  com.demo
  hello
  1.0-SNAPSHOT

  jar


Hello.java

package com.demo;

public class Hello{
    public static void main(String[] args){
        System.out.println("Hello");
    }
}
# 清理
$ mvn clean

# 编译
$ mvn compile

# 运行
$ mvn exec:java -Dexec.mainClass="com.demo.Hello"

2、命令构建Maven项目

创建命令

# 3.0.5
mvn archetype:generate

参数

-DgroupID=""
-DartifactID=""
-DpackageName=""
-DarchetypeArtifactId="maven-archetype-quickstart/maven-archetype-webapp"
-DinteractiveMode=false

eg:

$ mvn archetype:generate \
-DgroupId=com.demo \
-DartifactId=java-demo \
-DpackageName=com.demo \
-DarchetypeArtifactId=maven-archetype-quickstart

3、工具构建Maven项目

使用 IDEA创建Maven项目

archetype项目骨架加载过慢问题

拷贝archetype-catalog.xml到目录

~/.m2/repository/org/apache/maven/archetype/archetype-catalog/3.1.2

IDEA Build Tools -> Maven Runner设置VM Options:

-DarchetypeCatalog=local
自定义archetype项目骨架解决版本问题

windows如果报错需要修改

mvn.cmd -> mvn.bat
# 构建项目骨架
$ mvn archetype:create-from-project

# 安装到本地仓库
$ mvn clean install
Maven依赖范围管理
软件的依赖:
  - G: groupID
  - A: artifactID  
  - V: Version
  - Scope
    - compile  编译、运行、测试、打包(默认)
    - provided 编译、运行 eg: servlet
    - runtime  运行、打包 eg: mysql
    - test     测试
    - system   编译、运行
Maven父子项目依赖传递

父子项目 优点:

  1. 合理有效的复用依赖jar包
  2. 子项目互相独立,更加便于敏捷开发和独立管理

缺点:

  1. 项目之间的系统集成性能较差

父项目pom.xml




  4.0.0

  com.demo
  maven-parent
  1.0-SNAPSHOT

  maven-parent
  
  http://www.example.com

  
  pom

  
  
    UTF-8
    1.8
    1.8
    1.2.17
    4.11
    5.1.9.RELEASE
  

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

  
  
    
      
        log4j
        log4j
        ${log4j.version}
      
    
  



子项目pom.xml




  4.0.0

  
  
    com.demo
    maven-parent
    1.0-SNAPSHOT
    ../maven-parent/pom.xml
  

  
  
  maven-wiki
  1.0-SNAPSHOT

  maven-wiki
  
  http://www.example.com

  
    UTF-8
    1.7
    1.7
  

  
    
      junit
      junit
      4.11
      test
    

  
  
    
      log4j
      log4j
    
  



Maven项目聚合统一管理

项目聚合关系: 项目之间整体性较高,便于系统集成和维护


    maven-child1
    maven-child2

Maven插件管理

生命周期插件

  • resources
  • source
  • clean
  • compile

常用操作插件

  • tomcat7
  • dependency
  • jar

Maven插件查找 https://maven.apache.org/plugins/index.html

查看依赖插件


    org.apache.maven.plugins
    maven-dependency-plugin
    3.1.2

查看依赖

$ mvn dependency:tree

IDEA中可以右键查看依赖图

Maven私有服务器
  • Apache Archiva
  • JFrog Artifactory
  • Sonatype Nexus

下载页面: https://www.sonatype.com/nexus/repository-oss/download

Products->Nexus Repository Manager->OSS Edition

或者: https://help.sonatype.com/repomanager3/download

国外地址无法下载,找到一个方法,使用香港的服务器下载后再下载到本地

百度网盘下载: 链接: https://pan.baidu.com/s/1HY3Cwr8KSCm92JByc_BmQg 提取码: 6jwk

操作

# 启动
cd bin
$ ./nexus start

默认端口: http://localhost:8081/

创建私有仓库

私有服务器分类

  • proxy 代理远程仓库
  • group 分组管理
  • hosted 发布本地开发项目
    • releases 稳定版
    • snapshots 快照版
依赖下载和项目发布

依赖查找顺序:

本地仓库 < 私有仓库 < 中央仓库

登录之后可以创建新的仓库

1、从私有仓库通过代理下载依赖 pom.xml




    
        my-central
        My Central
        http://localhost:8081/repository/my-central/
        
            true
        
        
            true
        
    

2、发布项目 pom.xml

com.demo
maven-demo


1.0-SNAPSHOT


1.0-RELEASE




    
        my-release
        My Release
        http://localhost:8081/repository/my-release/
    

    
        my-snapshot
        My Snapshot
        http://localhost:8081/repository/my-snapshot/
    

配置账号密码 ~/.m2/settings.xml


    
        my-snapshot
        admin
        123456
    
    
        my-release
        admin
        123456
    

发布

$ mvn deploy
Maven构建JavaSE项目

通过IDEA创建Maven项目

项目结构

.
├── pom.xml
└── src
    ├── main
    │   ├── java
    │   │   └── com
    │   │       └── demo
    │   │           └── HelloWorld.java
    │   └── resources
    └── test
        └── java

HelloWorld.java

package com.demo;

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("hello");
    }
}

运行方式:

  1. 直接运行

  2. 配置运行参数

exec:java -Dexec.mainClass="com.example.HelloWorld"
Maven构建JavaWeb项目

项目骨架:maven-archetype-webapp

手工创建

项目结构

.
├── pom.xml
└── src
    ├── main
    │   ├── java
    │   │   └── com
    │   │       └── demo
    │   │           └── HelloServlet.java
    │   ├── resources
    │   └── webapp
    │       ├── WEB-INF
    │       │   └── web.xml
    │       └── index.jsp
    └── test
        └── java

pom.xml




    4.0.0

    com.demo
    java-web-demo
    1.0-SNAPSHOT

    
    war

    
        
            javax.servlet
            javax.servlet-api
            3.1.0
            
            provided
        
    

    
        
            
            
                org.apache.tomcat.maven
                tomcat7-maven-plugin
                2.2
            
        
    

web.xml





    
        index.jsp
    


index.jsp





    
    Demo


    我的web项目


HelloServlet.java

package com.demo;

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 需要配置 web.xml
 * version > 3.0
 * metadata-complete=false
 *
 * 参考:https://www.cnblogs.com/iCheny/p/10976735.html
 */
@WebServlet(value = "/hello")
public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().println("Hello World.");
    }
}

项目构建 Project Structure 创建Web 模块

两种方式启动:

1、命令行运行

$ mvn tomcat7:run

2、配置Tomcat

IDEA的即改即生效都不是太好,开发起来很痛苦啊 Eclipse 生效很及时

以Debug模式运行,编译后就生效了

依赖冲突

1、依赖直接冲突


  commons-beanutils
  commons-beanutils
  1.9.4




  org.apache.poi
  poi
  3.5-FINAL
  
    
      commons-logging
      commons-logging
    
  

2、依赖传递冲突

课程总结
  1. 环境搭建,文件结构

  2. 项目构建,配置梳理

  3. 仓库,坐标,命令和生命周期

  4. 项目依赖的范围管理

  5. 父子项目的传递,聚合项目的管理

  6. 私有服务器的构建使用

  7. 增强项目功能的插件

  8. 不同类型项目的构建

  9. 解决项目中的依赖冲突

关注
打赏
1665367115
查看更多评论
立即登录/注册

微信扫码登录

0.2167s