暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

maven核心概念 和 maven私服的创建

老李的Java学习日记 2020-04-23
682

(1)maven介绍

什么是maven?

maven:

  1. 项目管理构建工具。

  2. maven通过一个Project Object Model,项目对象模型的概念来管理整个项目。pom.xml

maven作用

  1. 项目管理。

    1. 管理项目的jar包。

    2. 管理项目的生命周期。

      (清理clean、编译compile、测试test、打包package、安装install、部署deploy)

  2. 项目构建。

    分模块构建项目。

常见的项目管理构建工具

  1. ant        最早项目管理构建工具。

  2. maven 目前最流行的项目管理构建工具。在java社区引用广泛。

  3. gradle  最早兴起于移动端开发。现在在java中也会有应用。

小结

maven项目管理构建工具。

(2)仓库

maven的仓库

存储jar包的地方就是仓库。

仓库分类

  1. 本地仓库

  2. 远程仓库

    1. 中央仓库

    2. 私服

    3. 第三方公共库。举例:阿里云

项目如何查找jar包?

(3)坐标

坐标

maven世界中通过坐标定位全球唯一的一个组件。

坐标组成

groupId:定义当前Maven项目隶属项目、组织

artifactId:定义实际项目中的一个模块

version:定义当前项目的当前版本

packaging:定义该项目的打包方式(pom/jar/war,默认为jar)


(4)依赖 A 依赖范围、依赖传递【重点】

依赖的作用

项目添加依赖,就相当于把jar包拷贝到项目中。

依赖范

<dependency> 

  <groupId>log4j</groupId>  

  <artifactId>log4j</artifactId>  

  <version>1.2.17</version>

  <scope>依赖范围</scope>

</dependency> 

compile 默认依赖范围,表示依赖的组件在编译、测试、运行都有效。会打入war包

test 测试依赖范围,只在测试时期有效。不会打入war包

provided 容器已提供范围,在编译有效,实际运行无效。(servlet-api).不会打入war包

runtime 运行范围。编译无效,实际运行有效。会打入war包。


依赖传递

  1. mavenA依赖junit,依赖范围是compile,mavenB依赖mavenA,问:mavenB对junit是否有依赖?有

  2. mavenA依赖junit,依赖范围是test,mavenB依赖mavenA,问:mavenB对junit是否有依赖?没有

  3. mavenA依赖junit,依赖范围是provided,mavenB依赖mavenA,问:mavenB对junit是否有依赖?没有

  4. mavenA依赖junit,依赖范围是runtime,mavenB依赖mavenA,问:mavenB对junit是否有依赖?有

  5. 总结:

    项目依赖的包,只有compile、runtime范围,才会发生依赖传递。


(5)依赖 B 可选依赖、依赖冲突、依赖排除


可选依赖

依赖冲突

2直,取下

1直1间,取直

2间,取上

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>

   <groupId>cn.itcast</groupId>
   <artifactId>mavenB</artifactId>
   <version>1.0-SNAPSHOT</version>

   <dependencies>
       <dependency>
           <groupId>cn.itcast</groupId>
           <artifactId>mavenA</artifactId>
           <version>1.0-SNAPSHOT</version>
       </dependency>

       <!--1) 如果2个直接依赖,依赖了同一个坐标不同版本的组件,以配置顺序的下方为主。
       <dependency>
           <groupId>log4j</groupId>
           <artifactId>log4j</artifactId>
           <version>1.2.16</version>
       </dependency>
       <dependency>
           <groupId>log4j</groupId>
           <artifactId>log4j</artifactId>
           <version>1.2.17</version>
       </dependency>-->

       <!--2) 如果一个直接依赖一个间接依赖,依赖了同一个坐标不同版本的组件,以直接依赖为主-->
       <!--直接依赖log4j-1.2.16.jar
       <dependency>
           <groupId>log4j</groupId>
           <artifactId>log4j</artifactId>
           <version>1.2.16</version>
       </dependency>-->
       <!--间接依赖log4j-1.2.17.jar
       <dependency>
           <groupId>org.slf4j</groupId>
           <artifactId>slf4j-log4j12</artifactId>
           <version>1.7.25</version>
       </dependency>-->


       <!--2) 如果2个间接依赖,依赖了同一个坐标不同版本的组件,以配置顺序的上方为主。-->
       <!--间接依赖spring-core-4.3.8.jar-->
       <dependency>
           <groupId>org.springframework</groupId>
           <artifactId>spring-webmvc</artifactId>
           <version>4.3.8.RELEASE</version>
       </dependency>
       <!--间接依赖spring-core-5.0.2.jar-->
       <dependency>
           <groupId>org.springframework</groupId>
           <artifactId>spring-jdbc</artifactId>
           <version>5.0.2.RELEASE</version>
       </dependency>
   </dependencies>
</project>

依赖排除

需求:要求使用spring-core-5.0.2.jar。配置如下:

解决1:把spring所有依赖版本都改为5.0.2 【一定要这样用】

解决2:调用位置。把间接依赖spring-core高版本的放到上方。

解决3:再添加spring-core的直接依赖,锁定版本。

解决4:使用依赖排除

<!--2) 如果2个间接依赖,依赖了同一个坐标不同版本的组件,以配置顺序的上方为主。-->
<!--间接依赖spring-core-4.3.8.jar-->
<dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-webmvc</artifactId>
   <version>4.3.8.RELEASE</version>
   <!--排除spring-webmvc组件对spring-core的间接依赖-->
   <exclusions>
       <exclusion>
           <groupId>org.springframework</groupId>
           <artifactId>spring-core</artifactId>
       </exclusion>
       <exclusion>
           <groupId>org.springframework</groupId>
           <artifactId>spring-aop</artifactId>
       </exclusion>
   </exclusions>
</dependency>
<!--间接依赖spring-core-5.0.2.jar-->
<dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-jdbc</artifactId>
   <version>5.0.2.RELEASE</version>
</dependency>


(6)分模块创建项目一继承与聚合【重点】

分模块创建项目,预览好处


继承与聚合的概念

  1. maven项目的继承

    作用:抽取公用配置。

  2. 聚合

    作用:聚集合并各个子模块作为一个整体运行。

小结

继承,主要是为了消除重复配置,统一管理各个组件的版本。

聚合,分模块构建项目首先要创建聚合项目,再创建聚合的子模块。可以快速构建运行项目



私服(1) 介绍【了解】

私服

  1. 安装

  2. 上传

  3. 下载


私服(2)安装

1.1.  下载

Nexus的官网http://www.sonatype.com/,下载Nexus Repository Manager OSS 2.xx。资料中已经下载“nexus-2.12.0-01-bundle.zip”。也可以使用“nexus-2.1.2.war”直接放置在tomcatwebapps目录下。


1.2.  安装

解压“nexus-2.12.0-01-bundle.zip”;Nexus默认的端口可以在配置文件中修改,路径为:nexus-2.12.0-01\conf\nexus.properties;里面的内容如下:

1.3.  启动

在路径“nexus-2.12.0-01\bin\jsw\windows-x86-64\”目录下:双击console-nexus.bat为后台启动Nexus;双击“install-nexus.bat”则会注册为一个windows服务。


1.4.  访问

Nexus启动后,可以在浏览器中输入:http://localhost:8081/nexus


点击“Log In



输入默认的帐号:admin,密码:admin123

点击“Repositories”浏览各个仓库。



1.点击如下文件

2.检查服务是否有启动。默认会启动。

3.访问

图1:访问地址

http://localhost:8081/nexus

图2:登陆。用户名/密码:  admin/admin123

4.唯一需要修改的地方


文章转载自老李的Java学习日记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论