• Maven 学习笔记


    Maven

    Maven是Java项目构建工具,可以用于管理Java依赖,还可以用于编译、打包以及发布Java项目,类似于JavaScript生态系统中的NPM。

    构建环节:清理-编译-测试-报告-打包-部署

    • 清理:将编译代码前生成的内容删除
    • 编译:将源代码编译为字节码
    • 测试:运行单元测试用例
    • 报告:测试程序的结果
    • 打包:将 java 项目打成 java 包;将 Web 项目达成 war 包;
    • 安装:将 jar 或 war 生成到 Maven 仓库中;
    • 部署:将 jar 或 war 从 Maven 仓库中部署到 Web 服务器上运行;

    配置相关

    settings.xml文件

    可以定义本地仓库的实际路径:

    <localRepository>/path/to/local/repo</localRepository>
    

    Maven 镜像源设置,第一个 mirror 才会生效,其他的只是放这儿,后期可以将某个调整至第一个,使其生效,提高下载速度和稳定性:

    	<!-- https://blog.csdn.net/sayyy/article/details/80447757 -->
        <mirror>
          <!--This sends everything else to /public -->
          <id>nexus</id>
          <mirrorOf>*</mirrorOf>
          <url>https://maven.aliyun.com/nexus/content/groups/public/</url>
        </mirror>
        <mirror>
          <!--This is used to direct the public snapshots repo in the
              profile below over to a different nexus group -->
          <id>nexus-public-snapshots</id>
          <mirrorOf>public-snapshots</mirrorOf>
          <url>https://maven.aliyun.com/nexus/content/repositories/snapshots/</url>
        </mirror>
    <!-- https://mirrors.huaweicloud.com/ -->
    <!-- https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=1779 -->
        <mirror>
            <id>huaweicloud</id>
            <mirrorOf>*</mirrorOf>
            <url>https://mirrors.huaweicloud.com/repository/maven/</url>
        </mirror>
    

    注:< mirrorOf>可以设置为哪个中央仓库做镜像,为名为“central”的中央仓库做镜像,写作< mirrorOf>central< /mirrorOf>;为所有中央仓库做镜像,写作< mirrorOf>*< /mirrorOf>。Maven默认中央仓库的id 为 central。id是唯一的。

    重要:除非你有把握,否则不建议使用< mirrorOf>*< /mirrorOf>的方式。

    参考:

    pom.xml

    pom.xml中,<project></project>为最外层的标签;

    <modelVersion>4.0.0</modelVersion>定义了所使用的POM版本。这2个标签基本上是不变的。

    groupIdartifactIdversion 一起则定义了模块的坐标( Coordinates ),每个公共模块的坐标应该是唯一的:

    • groupId:组织名称,通常是把域名反过来,例如 com.fundebug
    • artifactId:模块名称,比如一个微服务的项目名称,例如 fundebug-java
    • version:模块版本,例如 0.2.0
      • 通常项目版本号分为 3 段,主版本号.次版本号.修订版本号
      • SNAPSHORT 表示开发中的版本;
      • RELEASE 表示一个正式发布版本,也可能没有任何后缀也表示正式版
      • M1 M2 ... M 表示里程碑,即将发布;
      • RC( Release Candicate) 发布候选
      • GA(General availability) 基本可用版本
      • SNAPSHORT<M1<M2<...<RC<GA<RELEASE

    SpringBoot Star 中可以看到版本的一个示例:

    <dependencies></dependencies>定义了当前项目所依赖的模块。Maven 可以根据 <dependency></dependency> 中定义的坐标,自动下载所依赖的模块。在 MacBook 上,Maven 将下载的模块缓存在 $HOME/.m2/ 目录。

    参考:

    Maven 常用命令

    • mvn compile 编译 Maven 工程,生成一些 class 文件和配置文件;
    • mvn package 编译并打包,根据 pom.xml 中元素 packagingjar 还是 war 进行打包。
    • mvn install 打包并安装到本地仓库。比如 env-service 服务可以安装到本地,deploy-service 服务可以通过项目在本地引用到;
    • mvn deployinstall,但打包并安装到远程仓库;
    • mvn clean 删除 target 目录;

    最近项目中用来打包生成 jar 包的命令:

    mvn clean package
    

    会在同目录下生成一个 target 目录,jar 包就在该子目录下;

    同时,另外一个项目是 gradle 写的,类似命令:

    gradle -x test build
    

    跳过测试阶段,生成的 jar 包在 build 的子目录中;

    项目用到的 Maven 包

    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
    
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
    
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
    
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.1.1</version>
    
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>4.1.6</version>
    
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.8</version>
    
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    
    
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-mapper-asl</artifactId>
    <version>1.9.13</version>
    
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    
    
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpcore</artifactId>
    
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpmime</artifactId>
    
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-recipes</artifactId>
    <version>2.11.1</version>
    
    <groupId>io.sentry</groupId>
    <artifactId>sentry-spring</artifactId>
    <version>1.6.3</version>
    
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-config</artifactId>
    
    
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-eureka</artifactId>
    
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-feign</artifactId>
    
    <groupId>net.sf.json-lib</groupId>
    <artifactId>json-lib</artifactId>
    <version>2.4</version>
    
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.5.0</version>
    
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.5.0</version>
    
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.7</version>
    
    <groupId>com.github.rholder</groupId>
    <artifactId>guava-retrying</artifactId>
    <version>2.0.0</version>
    
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.16.8</version>
    
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zipkin</artifactId>
    
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.7</version>
    
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.5</version>
    
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>RELEASE</version>
    
  • 相关阅读:
    Spring简介和基础
    el表达式
    Spring MVC 文件上传下载
    el表达式的function标签
    JSTL核心标签库使用
    基于注解的SpringMVC
    new一个Object对象占用多少内存?
    leetcode-第k个排列(Java和c++版)
    使用maven构建web项目(简易版)
    leetcode-电话号码的字母组合
  • 原文地址:https://www.cnblogs.com/michael-xiang/p/10466943.html
Copyright © 2020-2023  润新知