自学内容网 自学内容网

MicoZone-Maven

一、理论

Maven 是 Apache 软件基金会组织维护的一款专门为 Java 项目提供项目构建和依赖管理支持的工具。

通过Maven管理依赖的优势:
1、通过在pom.xml中指定jar包坐标即可自动从仓库下载依赖
2、如果jar包存在子依赖会自动下载子依赖包
3、如果jar包之间存在冲突,可以通过Maven的版本仲裁机制(最短路径优先,路径相同先声明者优先)或手动添加excludes标签,排除重复的依赖

TODO依赖范围
1、compile:默认依赖范围,编译、运行时都需要,会被打入jar包
2、test:仅在测试时需要
3、runtime:运行时需要,编译时不需要,会被打入jar包,如jdbc驱动包
4、provided:编译时需要,运行时不需要,不会被打入jar包,如servlet-api

继承与聚合:
父工程打包方式要用pom,通过父工程可以定义好所有子工程的依赖。
父工程的主要标签:modules、dependencyManagement
modules可以聚合子工程,通过执行父工程的构建命令会按序执行所有聚合的子工程,避免出现子工程间存在依赖关系,而由于构建顺序导致的报错
dependencyManagement可以声明依赖版本
通过import标签实现父工程继承另一个父工程:

<dependencyManagement>
    <dependencies>
        <!-- SpringCloud 微服务 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

二、命令

mvn clean:删除target目录
mvn compile:将src/main/java目录下的Java源文件编译为.class文件输出到target目录下
mvn test:会执行src/test/java目录下的单元测试类
mvn package:jar工程打成jar包,war工程打成war包
mvn install:将package打成的jar/war包发布到本地仓库
mvn deploy:将jar包部署到远程仓库,供其他人使用

三、settings.xml

settings.xml是maven的核心配置文件

<!-- 指定本地仓库 -->
<localRepository>D:\software\maven-repository</localRepository>
<!-- Maven 下载 jar 包默认访问境外的中央仓库,速度很慢,改成阿里云提供的镜像仓库 -->
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
<!-- 修改Java工程默认使用的JDK版本 -->
<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>

四、pom.xml

pom.xml是maven工程的核心配置文件

<!-- 当前Maven工程的坐标 -->
<groupId>com.micozone</groupId>
<artifactId>demo</artifactId>
<version>1.0</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<!-- Maven工程的打包方式,jar:jar包,war:war包,pom:父工程 -->
<packaging>jar</packaging>
<!-- 自定义属性,通过${}引用属性值 -->
<properties>
    <!-- 工程构建过程中读取源码时使用的字符集 -->
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!-- 当前工程依赖 -->
<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <!-- 配置依赖的范围 -->
        <scope>test</scope>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <!-- Maven自带插件,执行编译命令时使用该插件-->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
        <plugin>
            <!--使用定制化插件,修改Maven默认的打jar策略:生成可执行的jar包 -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.5.5</version>
</plugin>
    </plugins>
</build>

五、Nexus

Nexus是Maven仓库管理软件,可以用来搭建Maven远程仓库私服。
如果本地仓库没找到,会优先从私服找,私服如果没有才会去远程仓库找。
Nexus可以创建多个仓库,仓库类型有三种:
1、proxy:代理仓库,用于代理远程仓库,如阿里仓库镜像
2、hosted:本地仓库(宿主仓库),分为发行版release和快照版snapshot,快照版指版本号带有-SNAPSHOT,从本地上传的依赖都会放到release的宿主仓库中。
3、group:仓库组,聚合代理仓库和宿主仓库,提供统一服务地址。先去宿主仓库找,如果没有找到再去代理仓库找,找到之后缓存到私服,下次就能从私服直接获取。

五.1 搭建

将 nexus-3.25.1-04-unix.tar.gz 上传至Linux服务

# 解压
tar -zxvf nexus-3.25.1-04-unix.tar.gz
# 切换到bin目录
cd /micozone/app/nexus-3.25.1-04/bin
# 执行
./nexus start
# 查看状态
./nexus status
# 登录地址:http://ip:8081   账号:admin   密码:在/micozone/app/sonatype-work/nexus3目录下

PS:
创建自定义宿主仓库时,Deployment policy 选择 Allow redeploy,这样才能上传同一个jar包的不同版本
在这里插入图片描述

五.2 使用

修改settings.xml

<servers>
  <server>
    <id>micozone-public</id>
    <username>admin</username>
    <password>jrbjrb811</password>
    </server>
</servers>
<mirrors>
  <mirror>
    <id>micozone-public</id>
    <mirrorOf>*</mirrorOf>
    <name>micozone public</name>
    <!--指定nexus上group类型的仓库-->
    <!--查询依赖的顺序:本地仓库、仓库组下的仓库、仓库组下的代理仓库指定的远程仓库地址-->
    <url>http://192.168.84.10:8081/repository/micozone-public/</url>  
  </mirror>
</mirrors>

如果要通过mvn deploy命令将本地项目的jar包部署到Nexus,需修改pom.xml

<distributionManagement>
    <repository>
        <id>micozone-public</id>
        <!--settings.xml中配置的仓库组下的release类型的宿主仓库地址-->
        <url>http://192.168.84.10:8081/repository/micozone-release/</url>
    </repository>
    <snapshotRepository>
        <id>micozone-public</id>
        <!--settings.xml中配置的仓库组下的snapshot类型的宿主仓库地址-->
        <url>http://192.168.84.10:8081/repository/micozone-snapshot/</url>
    </snapshotRepository>
</distributionManagement>

将本地jar上传至私服有两种方式,第一种是通过mvn clean deploy(前提是pom.xml中配置了distributionManagement标签),将打成的jar包上传至release类型的宿主仓库中(会同步上传至仓库组下);第二种是直接在Nexus服务器上release类型的宿主仓库下直接上传jar包。
在这里插入图片描述


原文地址:https://blog.csdn.net/weixin_51140510/article/details/142625653

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!