Java-Maven

基本配置

  • 下载

    下载链接 下载流程
    maven下载
  • 配置:配置环境变量,将下载解压的mavenbin添加在path

    1
    2
    MAVEN_HOME: C:\SoftwareDownload\Maven\apache-maven-3.8.2\
    Path下: %MAVEN_HOME%\bin
  • 检测

    检测命令 检测结果
    mvn -version 版本信息验证

第一个MAVEN应用

  • IDEA Maven 配置添加

    IDEA-Maven 配置
    IDEA-Maven配置
  • 构建一个maven 项目

    Maven项目创建流程
  • maven 仓库地址

  • maven 依赖添加步骤

    Maven-依赖获取流程 gif
    Maven-依赖获取流程 maven添加依赖

镜像配置

基础组件: 仓库

  • 远程仓库/中央仓库

  • 本地仓库:C:/User/用户名/.m2/repository

  • 本地仓库配置

    1
    2

    <localRepository>D:/ProgramData/Maven/apache-maven-3.8.1/urlslibs</localRepository>
    仓库分类

配置全局 JDK

  • 在配置文件的profiles 节点内添加如下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <profiles>

    <profile>
    <id>jdk1.8</id>
    <activation>
    <activeByDefault>true</activeByDefault>
    <jdk>1.8</jdk>
    </activation>
    <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <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>
    <!-- 激活配置 -->
    <activeProfiles>
    <activeProfile>jdk1.8</activeProfile>
    </activeProfiles>
    </profiles>

    这样我们在创建maven 项目时就会自动使用该jdk 版本,目前推荐jdk1.8

依赖管理

  • 管理

    依赖管理
    • 依赖传递冲突问题
      • 路径优先: 当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高
      • 声明优先: 当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的
      • 特殊优先: 当同级配置了相同资源的不同版本,后配置的覆盖先配置的
  • 依赖范围

    • 主程序范围有效(main 文件夹范围内)

    • 测试程序范围有效(test 文件夹范围内)

    • 是否参与打包(package 指令范围内)

      scope 主代码 测试代码 打包 范例
      compile(默认) Y Y Y log4j
      test Y junit
      provided Y Y servlet-api
      runtime Y jdbc

多环境配置

  • 多环境配置

    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
    <profiles>
    <profile>
    <!-- 配置为开发环境 -->
    <id>dev</id>
    <!-- 构建 -->
    <build>
    <!-- 构建输出名称 -->
    <finalName>dev-war</finalName>
    </build>
    <repositories>
    <repository>
    <id>alimaven</id>
    <name>aliyun maven</name>
    <url>https://maven.aliyun.com/repository/public</url>
    <releases>
    <enabled>true</enabled>
    </releases>
    <snapshots>
    <enabled>false</enabled>
    </snapshots>
    </repository>
    </repositories>

    <!-- 激活开发环境 -->
    <activation>
    <activeByDefault>true</activeByDefault>
    </activation>

    </profile>

    <profile>
    <!-- 配置为测试环境 -->
    <id>test</id>
    <!-- 构建 -->
    <build>
    <!-- 构建输出名称 -->
    <finalName>test-war</finalName>
    </build>
    <repositories>
    <repository>
    <id>alimaven</id>
    <name>aliyun maven</name>
    <url>https://maven.aliyun.com/repository/public</url>
    <releases>
    <enabled>true</enabled>
    </releases>
    <snapshots>
    <enabled>false</enabled>
    </snapshots>
    </repository>
    </repositories>
    </profile>

    <profile>
    <!-- 配置为生产环境 -->
    <id>procuctEnv</id>
    <!-- 构建 -->
    <build>
    <!-- 构建输出名称 -->
    <finalName>proc-war</finalName>
    </build>
    <repositories>
    <repository>
    <id>alimaven</id>
    <name>aliyun maven</name>
    <url>https://maven.aliyun.com/repository/public</url>
    <releases>
    <enabled>true</enabled>
    </releases>
    <snapshots>
    <enabled>false</enabled>
    </snapshots>
    </repository>
    </repositories>
    </profile>
    </profiles>
  • 打包测试多环境配置

    成功使用测试环境打包
    成功使用测试环境打包

Maven 命令

  • 基本命令

    mvn 命令
    mvn 命令

资源插件

  • 加载xml 文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <build>
    <resources>
    <resource>
    <!-- 所在目录 -->
    <directory>src/main/java</directory>

    <includes>
    <include>**/*.properties</include>
    <include>**/*.xml</include>
    </includes>

    <filtering>false</filtering>
    </resource>
    </resources>
    </build>

    1. 默认没有使用 resources 的时候,maven 执行编译代码时,会把 src/main/resources 目录中的文件拷贝到 targer/classes 目录中,对于 src/main/java 目录下的非 java 文件不处理,不拷贝到 target/classes 目录中

    2. 我们的程序有需要把一些文件放在 src/main/java 目录中,当我们在执行 java 程序时,需要用到 src/main/java 目录中的文件 需要告诉 maveb 在 mvn compile src/main/java 目录下的程序时,需要把文件一同拷贝到 target/classes 目录中。此时就需要在 <build>中加入 <resources>

  • resources 文件夹移动到src/main/,再进行如下操作,读取数据库时将不会出现NullPointerException

    资源路径配置
    资源路径配置

单元测试

  • 测试的是类中的方法,方法都是独立测试

  • 单元测试

    1
    2
    3
    4
    5
    6
    7
    8
    9
    import org.junit.Test;

    public class TestMaven {
    @Test
    public void testMaven() {
    System.out.println("我是 maven 测试 ");
    }
    }

打包

  • 命令

    1
    2
    3
    4
    5
    6
    mvn package

    # 三种
    war # web
    jar
    pom # 聚合
  • 结果

    打包为war,linux 服务器Tomcat 部署
    打包为war,在linux服务器Tomcat部署
  • 打包输出影响信息

    1
    2
    3
    4
    5
    6
    7
    <!-- <groupId>com.coderitl</groupId> -->
    <artifactId>FileUpLoad</artifactId>
    <version>1.0-SNAPSHOT</version>
    <name>FileUpLoad</name>

    <!-- 配置打包形式 -->
    <packaging>war</packaging>

插件

  • pom 里配置tomcat 插件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    web: 
    需配置 => <packaging>war</packaging>

    <plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.2</version>
    <configuration>
    <hostName>localhost</hostName> <!-- Default: localhost -->
    <port>8080</port> <!-- 启动端口 Default:8080 -->
    <path>/</path> <!-- 访问应用路径 Default: /${project.artifactId}-->
    <uriEncoding>UTF-8</uriEncoding>
    </configuration>
    </plugin>

    • 无需下载系统tomcat,运行插件中的tomcat

      运行插件中的tomcat
      运行插件中的tomcat
  • war 包插件

  • jar 包插件

  • 编译插件

    1
    2
    3
    4
    5
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>3.3.1</version>
    </plugin>
  • 插件无法下载

    • 配置代理

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      <proxies>
      <proxy>
      <id>httpproxy</id>
      <active>true</active>
      <protocol>http</protocol>
      <host>127.0.0.1</host>
      <port>7890</port>
      </proxy>
      <proxy>
      <id>httpsproxy</id>
      <active>true</active>
      <protocol>https</protocol>
      <host>127.0.0.1</host>
      <port>7890</port>
      </proxy>
      </proxies>
    • 终端执行如下命令

      1
      2
      # 你可以确保项目所需的依赖项都已经被正确地解决和下载。这是在开始构建或运行项目之前一个常用的步骤,以确保依赖项的可用性和一致性。
      mvn dependency:resolve

Git下载的项目运行方式

主要是对环境进行配置,下载依赖、jdk、xxx.iml 文件、数据库配置等

项目运行依赖配置
快捷键ctrl+alt+shift+s

Maven 进阶

分模块开发
  • 意义

    将原始模块按照功能拆分成若干个子模块,方便模块间的相互调用,接口共享

  • 实现多模块

    • 创建maven 项目

      创建A模块
      创建A模块
    • 模块之间通过依赖引入

      创建maven
      创建B模块
    • B模块引用A模块,A模块的maven生命周期下点击 install,然后在B 模块引用A的坐标,刷新依赖

      使用A 模块在B 添加A 模块依赖
      使用A模块在B中 添加A模块依赖
依赖管理
  • 依赖具有传递性

    • 直接依赖: 在当前项目中通过依赖配置建立的依赖关系

    • 间接依赖: 被资源的资源如果依赖其他资源,当前项目简介依赖其他资源

      直接依赖与间接依赖
      直接依赖与间接依赖
    • 依赖关系查看

      依赖关系查看
      依赖关系查看

私服

  • Nexus

    https://help.sonatype.com/repomanager3/product-information/download

    下载
  • 启动

    1
    2
    # bin/ => cmd
    nexus /run nexus
    latest-win64\nexus-3.20.1-01\bin 启动成功标志
  • 访问

    http://localhost:8081

  • 配置文件位置

    latest-win64\nexus-3.20.1-01\etc => 修改端口号
  • 私服仓库

    私服仓库
    • 仓库分类

      • 宿主仓库hosted
        • 保存无法从中央仓库获取的资源
          • 自主研发
          • 第三方非开源项目
      • 代理仓库proxy
        • 代理远程仓库,通过nexus 访问其他公共仓库,例如中央仓库
      • 仓库组group
        • 将若干仓库组成一个群组,简化配置
        • 仓库组不能保存资源,属于设计型仓库
    • 登录获取用户名和密码

      登录获取用户名(admin)和密码 修改新密码
    • 资源上传

      • idea 配置

        idea 配置
      • nexus 仓库

        • 新建仓库

          新建仓库 选择如下的hosted
        • 创建hosted release 仓库

          release 完成版的 添加到public 组中
        • 创建hosted snapshots

          snapshots,之后添加到maven-public
    • 本地配置私服

      • maven 配置

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        <servers>
        <server>
        <id>coderitl-release</id>
        <username>admin</username>
        <password>root</password>
        </server>
        <server>
        <id>coderitl-snapshots</id>
        <username>admin</username>
        <password>root</password>
        </server>
        </servers>
      • 什么样的资源来自于私服

        1
        2
        3
        4
        5
        <mirror>
        <id>nexus-coderitl</id>
        <mirrorOf>*</mirrorOf>
        <url>http://localhost:8081/repository/maven-public/</url>
        </mirror>
    • 配置发布到私服

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      <!-- idea 的 pom 中配置 -->
      <distributionManagement>
      <repository>
      <id>coderitl-release</id>
      <url>http://localhost:8081/repository/coderitl-release/</url>
      </repository>
      <snapshotRepository>
      <id>coderitl-snapshots</id>
      <url>http://localhost:8081/repository/coderitl-snapshots/</url>
      </snapshotRepository>
      </distributionManagement>
      • 发布流程

        发布流程
      • 发布到私服

        点击发布 查看