欢迎来到信息岛!
adminAdmin  2024-10-24 09:00 信息岛 显示边栏 |   抢沙发  16 
文章评分 0 次,平均分 0.0

Maven

Java课程系列之构建工具

JavaEE教研组 | 版本:V1.0

学习目标

1、Maven简介

2、下载与配置

3、构建Java项目、Java Web项目

4、掌握常用构建命令

5、依赖管理、传递依赖、依赖冲突

6、创建聚合工程

7、私服上传与下载 【了解】

Maven简介

读音

Maven是什么

Maven是apache下的一个开源项目,java语言开发。

Maven是一个项目管理工具,它包含了项目对象模型标准集合依赖管理系统以及运行定义在生命周期阶段中插件目标和逻辑。

Maven是一个项目构建工具

Maven优点

1、一步构建:一个命令即可启动

2、依赖管理:对jar包统一管理,避免冲突等问题

3、跨平台:可在window、linux上使用

4、开发效率:Maven遵循规范开发有利于提高大型团队的开发效率,降低项目的维护成本,大公司都会考虑使用Maven来构建项目

Maven下载、安装与配置

下载和安装

下载

下载地址

历史版本

安装

将Maven解压到一个不含有中文和空格的目录中。

目录说明

  • bin目录 mvn.bat (以run方式运行项目)、 mvnDebug.bat(以debug方式运行项目 )

  • boot目录 Maven运行需要类加载器

  • conf目录 settings.xml 整个Maven工具核心配置文件

  • lib目录 Maven运行依赖jar包

配置 : 环境变量【两处】

增加一个环境变量M2_HOME,值是Maven的安装路径(示例D:softapache-maven-3.8.4

将 %M2_HOME%/bin 加入环境变量 path

通过 mvn -v命令检查 Maven是否安装成功,看到Maven的版本为3.8.4及java版本为1.8即为安装成功。

C:UsersAdministrator>mvn -v
Apache Maven 3.8.4 (9b656c72d54e5bacbed989b64718c159fe39b537)
Maven home: D:softapache-Maven-3.8.4
Java version: 1.8.0_311, vendor: Oracle Corporation, runtime: C:Program Files (x86)Javajdk1.8.0_311jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows server 2019", version: "10.0", arch: "x86", family: "windows"

注:如果使用的是idea2019.3 版本,只能支持3.5.x

配置 : 配置文件【三处】

是%M2_HOME%confsettings.xml文件的修改

1、本地仓库修改

  • 本地仓库的默认路径为用户.m2repository
  • 我们可以在setting.xml中用修改本地仓库的路径
<localRepository>D:repository</localRepository>

2、镜像仓库修改

  • 一般默认的远程仓库在国内可能连接不上,所以我们可以修改远程仓库的地址为国内的镜像仓库上,镜像说明在下个节选
  • 修改Maven根目录下的conf文件夹中的setting.xml文件,内容如下:
<mirrors>
    <mirror>
        <id>aliyunmaven</id>
        <mirrorOf>*</mirrorOf>
        <name>阿里云公共仓库</name>
        <url>https://maven.aliyun.com/repository/public</url>
    </mirror>
</mirrors>

3、maven中编译版本

<profile>
    <id>jdk-1.8</id>
    <activation>
        <activeByDefault>true</activeByDefault>
        <jdk>1.8</jdk>
    </activation>
    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
    </properties>
</profile>

仓库分类与作用

仓库分类

本地仓库 :用来存储从远程仓库或中央仓库下载的插件和jar包,项目使用一些插件或jar包,优先从本地仓库查找。默认本地仓库位置在meven根目录下conf/settings.xml中,可看出: ${user.dir}/.m2/repository,${user.dir}表示windows用户目录。

镜像仓库:如果本地需要插件或者jar包,本地仓库没有,默认去中央仓库下载。中央仓库在国外,访问非常慢。就可以配置镜像仓库,镜像仓库一般是工厂提供的mirror仓库,在国外和国内都有服务器,不定期的去中央仓库更行更新,例如aliyun的镜像仓库。

中央仓库 :在Maven软件中内置一个远程仓库地址http://repo1.maven.org/maven2 ,它是中央仓库,服务于整个互联网,它是由Maven团队自己维护,里面存储了非常全的jar包,它包含了世界上大部分流行的开源项目构件。

仓库作用

Maven的工作需要从仓库下载一些jar包,如下图所示,本地的项目A、项目B等都会通过Maven软件从远程仓库或镜像仓库下载jar包并存在本地仓库,当第二次需要此jar包时则不再从远程仓库下载,因为本地仓库已经存在了。

下图描述了Maven中仓库的类型

全局配置与用户配置

1、全局配置文件:%MAVEN_HOME%confsettings.xml

2、用户配置文件:${user.home}.m2settings.xml

3、Maven会先找用户配置,如果找到则以用户配置文件为准,否则使用全局配置文件。

项目管理工具

项目对象模型

pom(Project Object Mobel)

每个maven工程中都有一个pom.xml文件(核心配置文件),通过pom.xml文件可以定义项目的坐标、打包方式、项目依赖、项目信息以及插件等。

标准集合

maven为整个项目管理过程定义了一组标准

  • 标准的目录结构
  • 标准的生命周期阶段
  • 标准的坐标定义

依赖管理

  • 通过依赖管理对项目所依赖的jar包进行统一规范的管理

项目构建工具

  • 项目构建是一个项目从编写源代码到编译、测试、运行、打包、部署、运行的过程

传统项目构建过程

传统的使用eclipse构建项目的过程如下:

1、在eclipse中新建一个WEB工程。

2、进行编码及编写配置文件

3、对源代码进行编译运行,生成class文件

4、打成war包,部署至tomcat

maven项目构建过程

maven将项目构建的过程进行标准化,每个阶段使用一个命令完成,下图展示了构建过程的一些阶段

清理 mvn clean

clean是Maven工程的清理命令,执行 clean会删除target目录的内容。

编译 mvn compile

compile是Maven工程的编译命令,作用是将src/main/java下的文件编译为class文件输出到target目录下

查看 target目录,class文件已生成,编译完成。

测试 mvn test

test是Maven工程的测试命令,会执行src/test/java下的单元测试类。

cmd执行mvn test执行src/test/java下单元测试类

打包 mvn package

package是maven工程的打包命令,对于java工程执行package打成jar包,对于web工程打成war包。

安装 man install

install是maven工程的安装命令,完成项目编译、单元测试、打包功能,同时把打包文件部署到本地Maven仓库,但未部署到远程Maven仓库。

报告 mvn site

site是Maven工程的生成站点命令,插件一般用来创建新的报告文档、部署站点等。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-project-info-reports-plugin</artifactId>
    <version>2.7</version>
</plugin>

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-site-plugin</artifactId>
    <version>3.3</version>
    <configuration>
        <locales>zh_CN</locales>
    </configuration>
</plugin>

部署 mvn deploy

deploy是Maven工程的部署命令,完成项目编译、单元测试、打包功能,同时把打包文件部署到本地Maven仓库和远程Maven仓库。

创建项目

命令方式

1、命令行创建普通java项目

mvn archetype:generate -DgroupId=net.wanho -DartifactId=javademo -Dversion=1.0 -DarchetypeArtifactId=maven-archetype-quickstart

2、命令行创建javaWeb项目

mvn archetype:generate -DgroupId=net.wanho -DartifactId=javawebdemo -Dversion=1.0 -DarchetypeArtifactId=maven-archetype-webapp

Idea方式

配置

注意是要在Other Settings里配置

配置一:Maven目录、配置文件地址和本地仓库地址

配置二: 自动导入Maven依赖

创建Java项目

新建Java项目

新建Java Web项目

你要选择Maven然后按照下面图片 的指示操作就可以了---》最后点击next按钮

点击Finish后项目开始创建

点击右下角查看进去

更新依赖

Java Web项目运行方式

方式一: Tomcat Server

  • 热部署

IDEA还有一个好处就是热部署,这个呢在实际开发中是很管用的web开发,你后台,改了啥他就热部署,不用你重启tomcat,前台的也是,你修改jsp,css,js什么的都可以直接进行热部署,你只要自己刷新一下你的页面就行了。

式二: 使用Idea的Smart插件

方式三: 使用tomcat插件【不推荐】

pom.xml

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.tomcat.maven</groupId>
            <artifactId>tomcat7-maven-plugin</artifactId>
            <version>2.2</version>
            <configuration>
                <port>9090</port>
                <path>/</path>
                <uriEncoding>UTF-8</uriEncoding>
            </configuration>
        </plugin>
    </plugins>
</build>

管理工具深入

项目对象模型

pom.xml —— (POM)项目对象模型,也是maven项目核心配置文件

<project>
    <!-- GAV坐标-->
    <groupId>包名</groupId>
    <artifactId>项目名</artifactId>
    <version>版本</version>

    <!-- 打包,默认jar -->
    <packaging>jar|war|pom</packaging>

    <!--所有依赖-->
    <dependencies>
        <!-- 某个依赖 -->
        <dependency>
            <groupId>包名</groupId>
            <artifactId>项目名</artifactId>
            <version>版本</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <!-- 插件 -->
            <plugin>
            </plugin>
        </plugins>
    </build>
</project>

标准目录

目录说明

使用Maven创建的工程称为Maven工程,Maven工程具有标准性,如下:

  • src

    src/main/java —— 存放项目的.java文件

    src/main/resources —— 存放项目资源文件,如spring, mybatis配置文件

    src/test/java —— 存放所有单元测试.java文件,如JUnit测试类

    src/test/resources —— 测试资源文件

  • pom.xml —— 项目对象模型
项目名
    -src 
       -main
            -java
                 -package
            -resources
       -test
            -java
                 -package
            -resources
    -pom.xml

目录创建

方式一

方式二

也可以右键项目-选择Open Module Settings打开项目配置页面更改

也可以右键项目-选择Open Module Settings打开项目配置页面更改

依赖

传统项目jar管理

在说依赖管理之前,先聊一下传统项目jar如果管理的

传统的项目工程要管理所依赖的jar包完全靠人工进行,程序员从网上下载jar包添加到项目工程中,

如下图:程序员手工将mysql、servlet、jstl等jar添加到工程中的WEB-INF/lib目录下。

1、jar包从网上不好找

2、jar包没有进行统一管理,容易造成jar包重复及版本冲突

3、jar包全部添加到工程中,造成工程过大

Maven项目的jar管理

Maven项目所依赖的jar包不需要手动向工程添加jar包,只需要在pom.xml(Maven工程的配置文件)添加依赖

什么是依赖

一个Java项目可能要使用一些第三方的jar包才可以运行,那么我们说这个java项目依赖了这些第三方的jar包。比如项目依赖lombok、mysql

什么是依赖管理

就是对项目所有依赖,进行规范化管理,通过GAV坐标。全网唯一的GAV坐标,决定使用哪一个jar包。

依赖管理一般放在pom.xml文件中

如何依赖管理

在pom.xml中添加dependency标签,如下:

<dependency>
    <groupId></groupId>
    <artifactId></artifactId>
    <version></version>
</dependency

示例Junit4.9

<!‐‐ 添加junit4.9依赖 ‐‐>
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.9</version>
</dependency>

依赖管理优点

1、通过pom.xml文件对jar包的版本进行统一管理,可避免版本冲突。

2、Maven团队维护了一个非常全的Maven仓库,里边包括了当前使用的jar包,Maven工程可以自动从Maven仓库下载jar包,非常方便。

如何查找坐标

添加依赖需要指定依赖jar包的坐标,但是很多情况我们是不知道jar包的的坐标,可以通过如下网址查询:

http://search.maven.org/

http://mvnrepository.com/

网站搜索示例:

依赖范围

compile:编译范围,此范围为默认依赖范围。编译范围的依赖会用在编译、测试、运行都存在

provided:provided依赖在编译和测试时需要,在运行时不需要,比如:servlet、jsp和lombok

runtime:runtime依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如:jdbc的驱动包。由于 运行时需要所以runtime范围的依赖会被打包。

test:test范围依赖 在编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用,比如:junit。由于运行时不需要所以test范围依赖不会被打包。

system:system范围依赖与provided类似,但是你必须显式的提供一个对于本地系统中JAR文件的路径,需 要指定systemPath磁盘路径,system依赖不推荐使用。

import: 导入范围,他只是用在 dependencyManagement 中,表示从其他的 pom 中导入dependecy的配置。

传递依赖

当A 依赖B、B依赖C,在A中导入B后会自动导入C,C是A的传递依赖。

举例 : junit->hmcrest

依赖冲突

当A 依赖B、B依赖C(v1.0),

当A 依赖M、M依赖C (v2.0)

如下例子:

同时加入以下依赖,观察依赖:

<!-- https://mvnrepository.com/artifact/org.apache.struts/struts2-spring-plugin -->
<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-spring-plugin</artifactId>
    <version>2.5.30</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.3.20</version>
</dependency>

Maven自动按照下边的原则调解:

第一声明者优先原则

在pom文件定义依赖,先声明的依赖为准。测试:

如果将上边struts-spring-plugins和spring-context顺序颠倒,系统将导入spring-beans-4.2.4。 分析:

由于spring-context在前边以spring-context依赖的spring-beans-4.2.4为准,所以最终spring-beans-4.2.4添加到 了工程中。

路径近者优先原则

例如:A依赖 spirng-beans-4.2.4,A依赖B依赖 spirng-beans-3.0.5,则spring-beans-4.2.4优先被依赖在A中,因为spring-beans-4.2.4相对spirng-beans-3.0.5被A依赖的路径最近。

测试:

在本工程中的pom中加入spirng-beans-4.2.4的依赖,根据路径近者优先原则,系统将导入spirng-beans-4.2.4:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring‐beans</artifactId>
    <version>4.2.4.RELEASE</version>
</dependency>
排除依赖

上边的问题也可以通过排除依赖方法辅助依赖调解,如下:

比如在依赖struts2-spring-plugin的设置中添加排除依赖,排除spring-beans,

下边的配置表示:依赖struts2-spring-plugin,但排除struts2-spring-plugin所依赖的spring-beans。

<!‐‐ struts2‐spring‐plugin依赖spirng‐beans‐3.0.5 ‐‐>
<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2‐spring‐plugin</artifactId>
    <version>2.3.24</version>
    <!‐‐ 排除 spring‐beans‐‐>
    <exclusions>
        <exclusion>
            <groupId>org.springframework</groupId>
            <artifactId>spring‐beans</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.springframework</groupId>
            <artifactId>spring‐context</artifactId>
        </exclusion>
    </exclusions>
</dependency>

聚合与继承

聚合【父工程】

packaging 方式

<modelVersion>4.0.0</modelVersion>

<groupId>net.wanho</groupId>
<artifactId>wanlimall_parent</artifactId>
<version>1.0</version>
<!-- 模块设置-->
<modules>
    <module>wanliweb</module>
</modules>
<!-- 打包方式必须为pom方式-->
<packaging>pom</packaging>

锁定版本

面对众多的依赖,有一种方法不用考虑依赖路径、声明优化等因素可以采用直接锁定版本的方法确定依赖构件的版 本,版本锁定后则不考虑依赖的声明顺序或依赖的路径,以锁定的版本的为准添加到工程中,此方法在企业开发中常用。

如下的配置是锁定了spring-beans和spring-context的版本:

<dependencyManagement>
    <dependencies>
    <!‐‐这里锁定版本为4.2.4 ‐‐>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring‐beans</artifactId>
        <version>4.2.4.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring‐context</artifactId>
        <version>4.2.4.RELEASE</version>
    </dependency>
    </dependencies>
</dependencyManagement>

注意:在工程中锁定依赖的版本并不代表在工程中添加了依赖,如果工程需要添加锁定版本的依赖则需要单独添加

<dependencies></dependencies>标签,如下:

<dependencies>
    <!‐‐这里是添加依赖 ‐‐>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring‐beans</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring‐context</artifactId>
    </dependency>
</dependencies>

上边添加的依赖并没有指定版本,原因是已在<dependencyManagement>中锁定了版本,所以在<dependency> 下不需要再指定版本,当然子模块项目也可以添加版本,子模块的版本优先

dependencyManagement与pluginManagement介绍

dependencyManagement一般统一在父模块中进行声明,使用:用其实相当于一个对所有依赖jar包进行版本管理统一声明管理,但父模块中只是声明,并不真下导入。

parent/pom.xml

<dependencyManagement>
    <dependencies>
      <!-- https://mvnrepository.com/artifact/commons-beanutils/commons-beanutils -->
      <dependency>
        <groupId>commons-beanutils</groupId>
        <artifactId>commons-beanutils</artifactId>
        <version>1.9.3</version>
      </dependency>

      <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
      </dependency>
    </dependencies>
</dependencyManagement>

child/pom.xml

<parent>
    <artifactId>parent</artifactId>
    <groupId>net.wanhe</groupId>
    <version>1.0-SNAPSHOT</version>
</parent>

 <dependencies>
     <dependency>
         <groupId>commons-beanutils</groupId>
         <artifactId>commons-beanutils</artifactId>
     </dependency>

     <dependency>
         <groupId>junit</groupId>
         <artifactId>junit</artifactId>
         <scope>test</scope>
     </dependency>
</dependencies>

pluginManagement理解同dependencyManagement

properties介绍

可以理解成定义的版本变量

<!--可以理解成定义的版本变量-->
  <properties>
          <junit_version>4.12</junit_version>
  </properties>

<!--junit-->
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <!--引入版本变量-->
    <version>${junit_version}</version>
    <scope>test</scope>
    <exclusions>
        <exclusion>
            <artifactId>hamcrest-core</artifactId>
            <groupId>org.hamcrest</groupId>
        </exclusion>
    </exclusions>
</dependency>

9.2 继承 【子工程】

子模块可以继承父模块的内容

my-app的pom文件为:

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>net.wanho</groupId>
    <artifactId>my-app</artifactId>
    <version>1.0</version>
</project>

my-module的pom文件为:

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>net.wanho</groupId>
    <artifactId>my-module</artifactId>
    <version>1.0</version>
</project>

我们需要my-module去继承my-app,则需要在my-module的pom文件中添加以下代码:

方式一:

|-- my-module
     |   -- pom.xml
     -- pom.xml
<project>
    <parent>
        <groupId>com.mycompany.app</groupId>
        <artifactId>my-app</artifactId>
        <version>1</version>
    </parent>

    <groupId>com.mycompany.app</groupId>
    <artifactId>my-module</artifactId>
    <version>1</version>

    <modelVersion>4.0.0</modelVersion>
</project>

方式二:

 |-- my-module
 |   -- pom.xml
 -- parent
     -- pom.xml 
<project>
    <parent>
        <groupId>com.mycompany.app</groupId>
        <artifactId>my-app</artifactId>
        <version>1</version>
        <relativePath>../parent/pom.xml</relativePath>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>my-module</artifactId>
</project>

三套生命周期【了解】

三套生命周期

构建过程分为三套相互独立的生命周期,请注意是“三套”,而且“相互独立”,这三套生命周期分别是:

Clean Lifecycle 在进行真正的构建之前进行一些清理工作。

Default Lifecycle 构建的核心部分,编译,测试,打包,部署等等。

Site Lifecycle 生成项目报告,站点,发布站点。

生命周期 目的 包含的阶段
clean 清理 pre-clean、clean、post-clean
default 构建项目 validate、initialize、generate-sources、process-sources、
generate-resources、process-resources、compile、process-classes、
generate-test-sources、process-test-sources、generate-test-resources、
process-test-resources、test-compile、process-test-classes、test
prepare-package、package、pre-integration-test、integration-test、
post-integration-test、verifyinstalldeploy
site 建立项 pre-site、site、post-site、site-deploy

标红的阶段,默认绑定了内置的插件目标,

生命周期的阶段

每个maven命令对应生命周期的某个阶段,例如:mvn clean 命令对应clean生命周期的clean阶段, mvn test 命令对应default生命周期的test阶段。

执行命令会将该命令在的在生命周期当中之前的阶段自动执行,比如:执行mvn clean 命令会自动执行pre-clean 和clean两个阶段,mvn test命令会自动执行validate、compile、test等阶段。

注意:执行某个生命周期的某个阶段不会影响其它的生命周期!

如果要同时执行多个生命周期的阶段可在命令行输入多个命令,中间以空格隔开,例如:

clean package 该命令执行clean生命周期的clean阶段和default生命周期的package阶段。

Maven私服 【了解】

需求

问题:项目组编写了一个通用的工具类,其它项目组将类拷贝过去使用,当工具类修改bug后通过邮件发送给各个项目组,这种分发机制不规范可能导致工具类版本不统一。

解决方案:项目组将写的工具类通过maven构建,打成jar,将jar包发布到公司的maven仓库中,公司其它项目通过maven依赖管理从仓库自动下载jar包。

分析

公司在自己的局域网内搭建自己的远程仓库服务器,称为私服,私服服务器即是公司内部的maven远程仓库,每个员工的电脑上安装maven软件并且连接私服服务器,员工将自己开发的项目打成jar并发布到私服服务器,其它项 目组从私服服务器下载所依赖的构件(jar)。

私服还充当一个代理服务器,当私服上没有jar包会从互联网中央仓库自动下载,如下图:

搭建私服环境

## 查找nexus3镜像
docker search nexus3
## 拉取nexus3镜像
docker pull docker.io/sonatype/nexus3
## 查看镜像
docker images
## 创建目录
mkdir -p /root/docker/nexus3/data
## 运行nexus容器
docker run -id --privileged=true --name=nexus3 --restart=always -p 8081:8081 -p 8082:8082 -p 8083:8083 -v /root/docker/nexus3/data:/nexus-data sonatype/nexus3 
## 访问
http://192.168.100.205:8081
## 右上角登录,用户名 admin
## 密码,进入查看
docker exec -it nexus3 /bin/bash
vi /nexus-data/admin.password

将项目发布到私服

需求

企业中多个团队协作开发通常会将一些公用的组件、开发模块等发布到私服供其它团队或模块开发人员使用。

团队分别开发dao、service、web,某个团队开发完在dao会将dao发布到私服供service团队使用, 本例子会将dao工程打成jar包发布到私服。

配置

第一步: 需要在客户端即部署dao工程的电脑上配置 maven环境,并修改 settings.xml 文件,配置连接私服的用户和密码 。

此用户名和密码用于私服校验,因为私服需要知道上传都 的账号和密码是否和私服中的账号和密码 一致。

<server>  
    <id>maven-releases</id>  
    <username>admin</username>  
    <password>admin</password>  
</server>  
<server>  
    <id>maven-snapshots</id>  
    <username>admin</username>  
    <password>admin</password>  
</server> 

releases 连接发布版本项目仓库

snapshots 连接测试版本项目仓库

第二步: 配置项目pom.xml

配置私服仓库的地址,本公司的自己的jar包会上传到私服的宿主仓库,根据工程的版本号决定上传到哪个宿主仓库,如果版本为release则上传到私服的release仓库,如果版本为snapshot则上传到私服的snapshot仓库

<!--发布到私服仓库-->
<distributionManagement>
    <repository>
        <id>maven-releases</id>
        <name>Nexus Release Repository</name>
        <url>http://192.168.100.205:8081/repository/maven-releases/</url>
    </repository>
    <snapshotRepository>
        <id>maven-snapshots</id>
        <name>Nexus Snapshot Repository</name>
        <url>http://192.168.100.205:8081/repository/maven-snapshots/</url>
    </snapshotRepository>
</distributionManagement>

注意:pom.xml这里<id> 和 settings.xml 配置 <id> 对应!

操作命令

将项目dao工程打成jar包发布到私服:

1、首先启动nexus

2、对dao工程执行deploy命令

根据本项目pom.xml中version定义决定发布到哪个仓库,如果version定义为snapshot,执行deploy后查看nexus 的snapshot仓库,如果version定义为release则项目将发布到nexus的release仓库,本项目将发布到snapshot仓 库

从私服下载jar包

需求

没有配置nexus之前,如果本地仓库没有,去中央仓库下载,通常在企业中会在局域网内部署一台私服服务器,有 了私服本地项目首先去本地仓库找jar,如果没有找到则连接私服从私服下载jar包,如果私服没有jar包私服同时作为代理服务器从中央仓库下载jar包,这样做的好处是一方面由私服对公司项目的依赖jar包统一管理,一方面提高下载速度,项目连接私服下载jar包的速度要比项目连接中央仓库的速度快的多。

管理仓库组

nexus中包括很多仓库,hosted中存放的是企业自己发布的jar包及第三方公司的jar包,proxy中存放的是中央仓库 的jar,为了方便从私服下载jar包可以将多个仓库组成一个仓库组,每个工程需要连接私服的仓库组下载jar包。

上图中仓库组包括了本地仓库、代理仓库等。

在setting.xml中配置仓库(全局)

在客户端的setting.xml中配置私服的仓库,由于setting.xml中没有repositories的配置标签需要使用profile定义仓 库。

<mirror>
    <id>Nexus</id>
    <mirrorOf>*</mirrorOf>
    <name>Nexus</name>
    <!-- 私服地址 -->
    <url>http://192.168.44.204:8081/repository/maven-public/</url>
</mirror>
「点点赞赏,手留余香」

还没有人赞赏,快来当第一个赞赏的人吧!

admin给Admin打赏
×
予人玫瑰,手有余香
  • 2
  • 5
  • 10
  • 20
  • 50
2
支付

声明:本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

admin
Admin 关注:0    粉丝:0
这个人很懒,什么都没写

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享