• Maven 高级篇,Maven常用操作、高级操作、nexus私服搭建


    😀😀😀创作不易,各位看官点赞收藏.

    Maven 高级篇

    Maven:是Apache组织维护的一款专门为Java项目提供构建和依赖管理的工具。

    1. 构建过程:
    • 清理(clean):清理上一次构建信息,删除target文件夹。
    • 编译(compile):将Java源程序编译成class文件。
    • 测试(test):运行提前准备好的测试程序。
    • 打包(package):将项目打包成一个jar或war包。
    • 安装(install):把一个使用Maven打包成的jar包或war安装到Maven仓库。
    • 部署(deploy):将准备好的jar或war部署到服务器上运行。

    image-20221118200624966

    1. 依赖管理:管理项目中所需要的依赖jar包,从远程仓库去下载jar包,然后引入项目。也存在模块A需要使用模块B中的类,则通过Maven依赖管理引入模块B的jar包。
    • jar 包下载:使用坐标,从中央远程仓库中下载需要的jar 包。
    • jar 包依赖:模块与模块之间,使用Maven完成依赖的传递。
    • jar 包冲突:通过对依赖管理配置,让某些jar 包不被导入。
    1. Maven工作机制:

    image-20221118201329160

    1、Maven 安装

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

    image-20221118201716404

    解压文件并配置Maven

    1. 解压:将压缩包解压到一个没有中文的路劲下,解压完成后如下图。

    image-20221118202220774

    1. 指定本地仓库位置:在 conf/setting.xml 中,修改默认的仓库位置。保存路劲需要是非中文路径。

    img

    1. 配置阿里云镜像:在 conf/setting.xml 中,修改默认镜像,提高jar 包的下载速度。

    img

    <mirror>
    	<id>alimavenid>
    	<name>aliyun mavenname>
    	<url>http://maven.aliyun.com/nexus/content/groups/public/url>
    	<mirrorOf>centralmirrorOf>
    mirror>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    1. 配置Maven 工程的JDK版本:在 conf/setting.xml 中,修改 profiles 标签,默认是jdk-1.5,修改成jdk-1.8。
    <profile>
        <id>jdk-1.8id>
        <activation>
            <activeByDefault>trueactiveByDefault>
            <jdk>1.8jdk>
        activation>
    
        <properties>
            <maven.compiler.source>1.8maven.compiler.source>
            <maven.compiler.target>1.8maven.compiler.target>
            <maven.compiler.compilerVersion>1.8maven.compiler.compilerVersion>
        properties>
    profile>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    配置系统Maven 环境变量:

    1. 检查系统JAVA_HOME环境是否正确,因为Maven 需要Java环境,使用java -version命令

    image-20221119104416692

    1. 配置MAVEN_HOME环境,在系统变量中在Path中添加。

    image-20221119104753058

    1. 在Path下添加以下内容:

    image-20221119104852603

    1. 检查是否配置成功,使用 mvn -v 命令

    image-20221119104935997

    2、Maven 核心概念

    2.1、坐标

    坐标:由三部分组成groupId、artifactId、version,它用于去定位中央仓库中jar 包的位置。

    • groupId:公司的域名的逆序,例如org.spring
    • artifactId:在一个项目中对应的某个模块名称。
    • version:模块名称的版本号。
    
    <dependency>
        <groupId>org.projectlombokgroupId>
        <artifactId>lombokartifactId>
        <version>1.18.24version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    坐标与Jar 存放本地仓库路径映射:从坐标能知道jar 包存放在本地仓库的位置。

    例如:上面坐标映射为:Maven仓库位置/org/projectlombok/lombok/1.18.24/lombok.jar

    2.2、基础操作

    初始化maven项目:mvn archetype:generate

    image-20221119115710973

    image-20221119115801878

    直接回车,然后设置对应项目的groupId、artifactId、version。

    image-20221119120044062

    image-20221119121814494

    解读 pom.xml 文件:pom.xml是maven工程的核心配置文件,Project Object Module项目模型。

    <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.0modelVersion>
    
      
      <groupId>com.jxgroupId>
      <artifactId>maven-testartifactId>
      <version>1.0-SNAPSHOTversion>
    
      
      <packaging>jarpackaging>
    
      
      <properties>
        
        <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
      properties>
    
      
      <dependencies>
        <dependency>
          <groupId>junitgroupId>
          <artifactId>junitartifactId>
          <version>3.8.1version>
          <scope>testscope>
        dependency>
      dependencies>
    project>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    Maven 项目目录规则:这是Maven 约定的目录规则,不能改变(约定大于配置)。使用约定的目录结构,这样可以实现项目的自动化,自动构建、编译、打包等操作,因为知道每个目录下存放的是什么文件。

    image-20221119130126172

    Maven 都会去依赖一个超级POM,它里面定义了一个项目结构,这样其它的POM也需要按照这个结构去定义。另外在构建时会生成一个target文件,去存放构建生成的文件。

    常用命令:

    运行 Maven 中构建相关命令时,必须进入到 pom.xm 所在目录,不然后会报错。

    1. mvn clean:删除 target 目录。
    2. mvn compile:编译主程序,把编译结果输出到 target/classes 下。
    3. mvn test-compile:编译测试程序,把编译结果输出到 target/classes 下。
    4. mvn test:执行测试程序并将测试报告存放到 target/surefire-reports 下。
    5. mvn package:打包,将程序打包成指定程序,jar 或 war 包,存放在target 下,打包成的名称是 artifactId-version.jar 。
    6. mvn install:安装,将打包好的jar 包存放到本地仓库,存放路劲就是按在gav 规定的路径。
    7. mvn clean install -Dmaven.test.skip=true:上面的命令可以一次执行多个,常见打包命令会去跳过 test 阶段。

    2.3、依赖

    依赖方式:

    1. 第三方依赖:使用gav 坐标从中央仓库下载jar 包到本地,在项目中就可以直接使用。
    2. 模块之间依赖:模块 A 可以依赖模块 B 中编写的 Java 程序,通过引入模块 B 的gac 坐标。

    image-20221119165356038

    依赖范围:在使用 gav 坐标时,可以指定一个标签去指定 jar 包的使用范围以及使用时间。

    <dependency>
      <groupId>junitgroupId>
      <artifactId>junitartifactId>
      <version>4.13.2version>
      
      <scope>testscope>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    范围main目录test目录开发过程部署服务器
    compile(默认值)有效有效有效有效
    test无效有效有效无效
    provided有效有效有效无效
    • compile:默认值,任何目录、时间都有效。
    • test:只在test目录下有效,打包时不会将这个 jar 包打包。
    • provided:以提供的,表示在部署的服务器上已经提供了这个 jar 包,可以不用打包,如果打包可能会出现冲突。

    依赖传递:在一个项目中 A 依赖 B,然后 B 依赖 C,那么 A 可以直接使用 C,相当于是C传递给B,然后B传递给A。

    mvn dependency:tree用于查看依赖的树形结构。如果在没有使用继承管理模式,从一个模块去依赖另一个模块需要将另一个模块进行 install 安装到本地仓库才能使用。

    image-20221126130052883

    在 jar 包的使用范围是 test、provided 时,该依赖不能进行传递,因为 test 只在测试范围有效,test、provided 都不会打包。

    依赖排除:当引入的两个依赖中,存在相同依赖并且相同依赖的版本号不同就会出现依赖冲突,这就需要排除冲突的依赖。

    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-webartifactId>
        <version>2.6.8version>
        
        <exclusions>
            
            
            <exclusion>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starterartifactId>
            exclusion>
        exclusions>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    2.4、继承

    Maven 继承:模块 B 继承 模块 A ,A 作为父工程,B作为子工程,本质上是B继承了A的 pom.xml 配置。作用:就是在父工程中实现项目的统一依赖管理,具体就是管理依赖的版本信息。

    • 创建父工程:使用创建命令创建父工程,父工程用来管理子工程的,所以在父工程中不编写代码且打包方式必须是 pom 方式。
    <groupId>com.jxgroupId>
    <artifactId>maven-parentartifactId>
    <packaging>pompackaging>
    <version>1.0-SNAPSHOTversion>
    
    • 1
    • 2
    • 3
    • 4
    • 创建子工程:在父工程的文件目录下去创建Maven工程。
    
    <parent>
        <artifactId>maven-parentartifactId>
        <groupId>com.jxgroupId>
        <version>1.0-SNAPSHOTversion>
    parent>
    <modelVersion>4.0.0modelVersion>
    
    
    <artifactId>module-01artifactId>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    当创建子工程后,会在父工程的 pom 文件下发现 modules 标签。

    
    <modules>
        
        <module>module-01module>
    modules>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    父工程管理依赖版本:将项目中所用到的依赖在父工程中进行版本管理,然后所有子工程继承的父工程的依赖版本全都是一致的。

    
    
    
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-webartifactId>
                <version>2.6.8version>
            dependency>
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-redisartifactId>
                <version>1.3.6.RELEASEversion>
            dependency>
        dependencies>
    dependencyManagement>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    子工程引入父工程依赖:

    <dependencies>
        
        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>
    dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    父工程自定义属性变量:

    <properties>
        <maven.compiler.source>8maven.compiler.source>
        <maven.compiler.target>8maven.compiler.target>
        
        
        <spring.boot.version>2.5.6spring.boot.version>
    properties>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-webartifactId>
                
                <version>${spring.boot.version}version>
            dependency>
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-redisartifactId>
                <version>1.3.6.RELEASEversion>
            dependency>
        dependencies>
    dependencyManagement>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    IDEA配置Maven:需要在后面的 Override 打钩才能进行配置。

    image-20221126151250624

    2.5、生命周期

    ​ 在 Maven 中为了自动化构建项目,设定了三个生命周期,每个生命周期中的每个环节都是构建过程中的一个操作。==每个生命周期他有好多个环节,不管从生命周期的哪个环节下命令,他都是从生命周期的最开始环节开始执行,直到执行到下命令的环节。==Maven中有三个主要的生命周期Clean、Site、Default。

    image-20221126162528353

    image-20221126162604997

    3、Maven 深入

    3.1、Spring Boot 打包

    spring-boot-maven-plugin打包插件:在没有使用这个 Maven 打包插件时,会打成一个普通的 jar 包,没有打包依赖也没有指定main-class,所以无法直接运行。使用 Maven 打包插件可以将 Spring Boot 项目打包成一个可以运行的 jar 包,它可以自动打包所依赖的第三方 jar 包和内置的 Tomcat 中的 jar 包。

    
    <build>
        
        <finalName>${project.artifactId}finalName>
        
        <plugins>
            
            <plugin>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-maven-pluginartifactId>
                <version>2.0.1.RELEASEversion>
            plugin>
        plugins>
    build>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    注意:mvn clean package spring-boot:repackage打包命令,spring-boot:repackage命令必须在前两个命令前面,先要打成一个普通的 jar 包,不然后报错Source file must not be null

    设置默认执行的goal:每次执行都要去执行三个命令,可以在 execution 标签内指定默认执行的 goal。

    
    <build>
        
        <finalName>${project.artifactId}finalName>
        
        <plugins>
            
            <plugin>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-maven-pluginartifactId>
                <version>2.6.8version>
                
                <executions>
                    <execution>
                        <goals>
                            <goal>repackagegoal>
                        goals>
                    execution>
                executions>
            plugin>
        plugins>
    build>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    注意:采用如上配置时,只需要运行mvn的package阶段即可,由于repackage目标默认绑定在default生命周期的package阶段,所以运行mvn的package时,便会按照如上配置执行repackage目标。

    3.2、超级 POM

    超级POM:如果pom.xml没有指定父工程,它会默认去继承一个超级POM文件,类似于Java中的Object类。在超级POM定义了一些默认的配置,文件存放位置、打包编译输出位置以及一些基本信息。

    image-20221127135135785

    有效POM:在Maven 实际的构建过程中,实际是通过有效POM去完成构建的,而有效POM是当前pom.xml文件、父pom.xml、超级pom.xml文件组合起来的,而子pom.xml会覆盖父pom.xml文件的内容,相当于离当前pom.xml越近,优先级越高,没有设置就是用默认的。

    
    <project>
        <modelVersion>4.0.0modelVersion>
        
        
        <repositories>
            <repository>
                <id>centralid>
                <name>Central Repositoryname>
                <url>https://repo.maven.apache.org/maven2url>
                <layout>defaultlayout>
                <snapshots>
                    <enabled>falseenabled>
                snapshots>
            repository>
        repositories>
    
        
        <pluginRepositories>
            <pluginRepository>
                <id>centralid>
                <name>Central Repositoryname>
                <url>https://repo.maven.apache.org/maven2url>
                <layout>defaultlayout>
                <snapshots>
                    <enabled>falseenabled>
                snapshots>
                <releases>
                    <updatePolicy>neverupdatePolicy>
                releases>
            pluginRepository>
        pluginRepositories>
    
        
        <build>
            
            <directory>${project.basedir}/targetdirectory>
            
            <outputDirectory>${project.build.directory}/classesoutputDirectory>
            
            <finalName>${project.artifactId}-${project.version}finalName>
            
            <testOutputDirectory>${project.build.directory}/test-classestestOutputDirectory>
            
            <sourceDirectory>${project.basedir}/src/main/javasourceDirectory>
            <scriptSourceDirectory>${project.basedir}/src/main/scriptsscriptSourceDirectory>
            
            <testSourceDirectory>${project.basedir}/src/test/javatestSourceDirectory>
            
            <resources>
                <resource>
                    <directory>${project.basedir}/src/main/resourcesdirectory>
                resource>
            resources>
            
            <testResources>
                <testResource>
                    <directory>${project.basedir}/src/test/resourcesdirectory>
                testResource>
            testResources>
            
            <pluginManagement>
                
                
                <plugins>
                    <plugin>
                        <artifactId>maven-antrun-pluginartifactId>
                        <version>1.3version>
                    plugin>
                    <plugin>
                        <artifactId>maven-assembly-pluginartifactId>
                        <version>2.2-beta-5version>
                    plugin>
                    <plugin>
                        <artifactId>maven-dependency-pluginartifactId>
                        <version>2.8version>
                    plugin>
                    <plugin>
                        <artifactId>maven-release-pluginartifactId>
                        <version>2.5.3version>
                    plugin>
                plugins>
            pluginManagement>
        build>
    
        <reporting>
            <outputDirectory>${project.build.directory}/siteoutputDirectory>
        reporting>
    
        <profiles>
            
            <profile>
                <id>release-profileid>
    
                <activation>
                    <property>
                        <name>performReleasename>
                        <value>truevalue>
                    property>
                activation>
    
                <build>
                    <plugins>
                        <plugin>
                            <inherited>trueinherited>
                            <artifactId>maven-source-pluginartifactId>
                            <executions>
                                <execution>
                                    <id>attach-sourcesid>
                                    <goals>
                                        <goal>jar-no-forkgoal>
                                    goals>
                                execution>
                            executions>
                        plugin>
                        <plugin>
                            <inherited>trueinherited>
                            <artifactId>maven-javadoc-pluginartifactId>
                            <executions>
                                <execution>
                                    <id>attach-javadocsid>
                                    <goals>
                                        <goal>jargoal>
                                    goals>
                                execution>
                            executions>
                        plugin>
                        <plugin>
                            <inherited>trueinherited>
                            <artifactId>maven-deploy-pluginartifactId>
                            <configuration>
                                <updateReleaseInfo>trueupdateReleaseInfo>
                            configuration>
                        plugin>
                    plugins>
                build>
            profile>
        profiles>
    project>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139

    3.3、build 标签

    build 标签:一般用于配置构建项目时的一些参数配置和一些打包插件,如果没有配置一般使用超级POM的默认配置。

    常用配置:

    <build>
        	
        	
            
            <directory>${project.basedir}/targetdirectory>
            
            <outputDirectory>${project.build.directory}/classesoutputDirectory>
            
            <finalName>${project.artifactId}-${project.version}finalName>
            
            <testOutputDirectory>${project.build.directory}/test-classestestOutputDirectory>
            
            <sourceDirectory>${project.basedir}/src/main/javasourceDirectory>
            <scriptSourceDirectory>${project.basedir}/src/main/scriptsscriptSourceDirectory>
            
            <testSourceDirectory>${project.basedir}/src/test/javatestSourceDirectory>
            
            <resources>
                <resource>
                    <directory>${project.basedir}/src/main/resourcesdirectory>
                resource>
            resources>
            
            <testResources>
                <testResource>
                    <directory>${project.basedir}/src/test/resourcesdirectory>
                testResource>
            testResources>
    build>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    plugins 插件标签:用来指定项目构建时使用的插件。

    <build>
        
        
        
        <finalName>${project.artifactId}finalName>
        
        <plugins>
            
            <plugin>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-maven-pluginartifactId>
                <version>2.6.8version>
                
                <executions>
                    <execution>
                        
                        <id>boot-maven-pluginid>
                        
                        <phase>packagephase>
                        
                        <goals>
                            <goal>repackagegoal>
                        goals>
                    execution>
                executions>
            plugin>
        plugins>
    build>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    插件执行过程:可以在 configuration标签中去自定义自己插件的执行过程,不同的插件的执行过程不一致,因插件不同有不同的配置。

    指定 JDK 版本:我们在 setting.xml指定了 JDK 的版本,但是也可以在插件中去配置,这样无论项目在那个Maven环境下都可以使用指定 JDK 版本。

    
    <plugin>
        <groupId>org.apache.maven.pluginsgroupId>
        <artifactId>maven-compiler-pluginartifactId>
        
        <configuration>
            
            <source>1.8source>
            
            <target>1.8target>
            <encoding>UTF-8encoding>
        configuration>
    plugin>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    注意:也可以通过在属性定义中去指定 JDK 编译的版本。

    <properties>
        <maven.compiler.source>8maven.compiler.source>
        <maven.compiler.target>8maven.compiler.target>
        <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
    properties>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3.4、深入依赖

    import:在Maven 中只能继承一个父pom,如果需要继承多个管理依赖的pom,可以使用import 来引入。

    
    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-dependenciesartifactId>
        <type>pomtype>
        <scope>importscope>
        <version>2.6.8version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    注意:

    • 引入的依赖必须是pom打包类型的依赖,就是一个管理依赖的依赖。
    • 这个引入的位置必须是dependencyManagement标签中。

    System:本地依赖,如果需要引入本地磁盘上的依赖,可以使用这个类型,一般不用这种方式。

    <dependency>
        <groupId>xxxgroupId>
        <artifactId>xxxartifactId>
        <version>xxxxversion>
        
        <systemPath>例如d:/xxxx.jarsystemPath>
        <scope>systemscope>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    runtime:运行时依赖,表示这个依赖在运行时才起作用,在编译时没有作用。

    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-devtoolsartifactId>
        <version>${spring.boot.version}version>
        
        <scope>runtimescope>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    依赖版本仲裁:当在依赖中存在依赖同一个jar,但是依赖对应jar 包的版本不同,这时在Maven 中使用了依赖版本仲裁。

    • 最短路劲:在依赖的路径中,会使用离当前项目最近的依赖,下面pro25 会使用log4j 1.2.12 这个版本。

    image-20221127160057349

    • 最先声明:当依赖的路径中距离相同时,谁先声明依赖就是用哪个依赖。

    image-20221127160246402

    3.5、profile 标签

    profile:可以设置成在不同的环境下去激活不同的配置。例如生产环境、测试环境、开发环境等,通过配置不同profile 去启用不同环境配置。其实pom就是一个profile,在project 标签下除了modelVersion标签不能写,其它标签都是可以写到profile 中的,一般吧profile 标签写到pom 文件的最后,以便不同环境去覆盖之前配置好的环境。

    • setting.xml 配置:可以在Maven 的配置文件中去配置对应profile 标签,这样会全局生效。
    • pom.xml 文件:
    
    <profiles>
        
        <profile>
            
            <id>devid>
            
            <activation>
                
                <activeByDefault>trueactiveByDefault>
                
                <jdk>1.8jdk>
            activation>
    
            
            <properties>
                <profiles.active>devprofiles.active>
                <nacos.namespace>testnacos.namespace>
                <nacos.server-addr>127.0.0.0:8848nacos.server-addr>
            properties>
        profile>
    profiles>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    基于环境激活profile:Maven 可以是基于运行环境去激活对应的配置环境,一个profile 被激活那么profile 定义的配置会覆盖原来的配置。

    
    <profile>
        <id>testid>
        
        <activation>
            
            <activeByDefault>falseactiveByDefault>
            <jdk>1.8jdk>
            <os>
                <name>Window XPname>
            os>
            <property>
                <name>mavenVersionname>
                <value>3.8.6value>
            property>
        activation>
    profile>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • Maven 3.2.2 之前:如果有一个条件满足就会被激活。
    • Maven 3.2.3 开始:要配置的所有条件全部满足才会被激活。

    资源过滤:在配置文件中可以去使用pom.xml 文件声明的变量,properties 文件使用${xxxx},yaml 文件使用@xxxx@引用。

    • 配置资源过滤:
    <build>
        <resources>
            <resource>
                <directory>${project.basedir}/src/main/resourcesdirectory>
                
                <filtering>truefiltering>
            resource>
        resources>
    build>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    spring:
      profiles:
        # 使用pom文件声明的属性
        active: @profiles.active@
      application:
        name: module-01
      cloud:
        nacos:
          discovery:
            server-addr: @nacos.server-addr@
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    image-20221127203027447

    4、搭建Nexus 私服

    Nexus私服:一个特殊的远程仓库,它是架设在局域网内的仓库服务,供局域网内的开发人员使用。 当Maven 需要下载构建的使用, 它先从私服请求,如果私服上没有的话,则从外部的远程仓库下载,然后缓存在私服上 ,再为Maven的下载请求提供服务。

    4.1、安装与启动

    下载地址,下载后直接服务器然后解压。

    image-20221128132045743

    1. 修改默认端口:在etc/nexus-default.properties下修改。

    image-20221128132247698

    1. 启动nexus 服务:在bin 目录下执行./nexus start,检查启动状态:./nexus status

    image-20221128164207683

    1. 通过浏览器访问,ip:端口号

    image-20221128164531779

    1. 登录

    image-20221128164522214

    1. 配置

    image-20221128164932057

    4.2、仓库

    仓库类型:nexus 一共有三种仓库类型proxy、group、hosted。

    类型作用
    proxy某个远程仓库的代理,一般是中央仓库
    group存放:第三方jar 包的仓库
    hosted存放:团队自己开发的仓库

    image-20221128172913298

    修改代理仓库镜像为阿里云镜像:

    image-20221128182629526

    image-20221128182749793

    http://maven.aliyun.com/nexus/content/groups/public/
    
    • 1

    4.3、使用

    从私服仓库下载jar 包:

    • 修改Maven 的镜像为私服镜像:

    image-20221128183421079

    <mirror>
        <id>nexusmavenid>
        <name>nexus mavenname>
        <url>http://192.168.32.128:11234/repository/maven-central/url>
        <mirrorOf>centralmirrorOf>
    mirror>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 私服访问密码:如果禁止了匿名访问,必须在setting.xml 文件中指定访问密码。
    <servers>
        <server>
            
            <id>nexusmavenid>
            <username>adminusername>
            <password>liujixingpassword>
        server>
    servers>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 测试下载jar 包

    image-20221128221402725

    image-20221128221614499

    上传jar 包:将自己打包好的jar 包上传到私服中,提供给其他人下载。

    • 在pom.xml 添加私服的地址
    <distributionManagement>
        <snapshotRepository>
            
            <id>nexusmavenid>
            <name>nexus mavenname>
            
            <url>http://192.168.32.128:11234/repository/maven-snapshots/url>
        snapshotRepository>
    distributionManagement>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 使用 mvn deploy将jar 包部署到私服上

    image-20221129202019408

    依赖私服上的jar 包:在Maven 中默认访问的仓库是setting.xml 部署的public 仓库,如果想使用别人私有的jar 包需要在仓库中配置一个repository

    <repositories>
        <repository>
            
            <id>nexusmavenid>
            <name>nexus mavenname>
            
            <url>http://192.168.32.128:11234/repository/maven-releases/url>
            <snapshots>
                <enabled>trueenabled>
            snapshots>
            <releases>
                <enabled>trueenabled>
            releases>
        repository>
    repositories>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    最近发现除了腾讯云和阿里云之外的一种好用的云服务器,那就是三丰云云服务器,它拥有众多的功能,其中一个就是可以免费试用一款云服务器,下面介绍它的使用方式。

    官方地址:https://www.sanfengyun.com/

    image-20230307102210797

    然后进行一个实名认证和微信的绑定就可以申请一个 1c1g的免费服务器。

    image-20230307102330457

  • 相关阅读:
    mysql客户端navicat的一些错误合集
    【JAVA - ArrayList】炸金花的模拟实现流程(买牌,洗牌,发牌)
    机器学习(七)朴素贝叶斯、决策树与随机森林
    Fundamental Library for ABAP 主要的组成部分概述
    Go 中的类型断言与静态转换
    UJNOJ_1287-1293-水题
    redis命令记录
    h5+js 移动端监听点击、移动、松开,获取鼠标位置
    3、Elasticsearch分词器简介与使用(二)
    十四、商城 - 商城架构-SSM(2)
  • 原文地址:https://blog.csdn.net/L__HH/article/details/128121039