Maven

  • Tomcat 部署项目的方式
  • 传统项目 vs Maven 项目
  • Maven
    • Maven 项目的常见目录
    • pom.xml
    • 构建生命周期
    • default 生命周期
    • 常用命令
    • dependency 中 scope 的取值
  • Maven 常见操作
    • 初始化配置:环境变量、仓库位置、配置镜像
    • 修改 Maven 的 JDK 版本
    • 命令行新建 Maven 项目
    • IDEA 导入 Maven 项目
    • IDEA 新建 Maven 项目(Web 项目)
    • 生成 Runnable Jar
    • 安装本地 jar 到 Maven 的 LocalRepository
  • Maven 常见问题解决
    • 文件编码的警告:Using platform encoding
    • 控制台输出乱码

Java 从 0 到架构师目录:【Java从0到架构师】学习记录

Tomcat 部署项目的方式

Tomcat 部署项目的方式有 4 种:

  1. 将 web 项目整个文件夹,放在 %TOMCAT_HOME%/webapps 目录中,文件夹名作为 ContextPath
  2. 将 web 项目打包成 war,放在 %TOMCAT_HOME%/webapps 目录中,war 文件名作为 ContextPath
  3. %TOMCAT-HOME%/conf/server.xml 的 Host 标签中添加以下内容(ContextPath 是 path 属性值)
<Context docBase="项目路径" path="/xxx" />
  1. %TOMCAT_HOME%/conf/Catalina/localhost 中新建一个 xml 文件,xml 文件名作为 ContextPath
<Context docBase="项目路径"/>

传统项目 vs Maven 项目

传统开发中的常见痛点:

  • jar 包的下载、升级、依赖、冲突
  • 不同 IDE 之间的项目共享
  • 单元测试
  • 打包发布

传统项目 vs Maven 项目:

Maven

Apache Maven,主要用于自动化构建和管理 Java 项目

  • 基于 项目对象模型(POM,Project Object Model ) 的概念
  • 下载地址:https://maven.apache.org/download.cgi

必须配置好 JAVA_HOME,Maven 对 JDK 版本的要求:https://maven.apache.org/docs/history.html

添加 MAVEN_HOME\bin 到 PATH 中:

Maven 仓库查询:

  • https://search.maven.org/
  • https://mvnrepository.com/

Maven 项目的常见目录

Maven 使用 “约定优于配置” 的思想 (Convention over Configuration)

  • 创建 Maven 项目时,Maven 将创建默认项目结构,开发人员只需要相应地放置文件

pom.xml

pom.xml 是 Maven 项目的核心配置文件,根元素是 project。project 的常用子元素如下表所示:

groupId、artifactId、version 组成一个 Maven坐标 (Coordinate),能够唯一的确定一个项目

构建生命周期

构建生命周期,描述了构建的过程。Maven 内置了 3 个构建生命周期:

  • clean(清理)
  • default(默认,重点关注)
  • site(站点)

构建生命周期由 phase(阶段)组成

  • phase 可以跟 plugin goal(插件目标)绑定
  • plugin goal 代表 1 个特定的任务
  • 一旦某个 phase 被执行,就会执行其绑定的所有 goal

通过命令 mvn 插件:help 可以查看插件包含的所有 goal

  • 比如 mvn archetype:help

default 生命周期

default 生命周期由下表中的 phase 组成:

使用命令 mvn package 就会按顺序执行 validate、compile、test、package 这几个阶段

常用命令

mvn archetype:generate:创建 Maven 项目

mvn clean:清楚 target

mvn clean package:先执行 clean,再执行 package

dependency 中 scope 的取值

compile默认。编译依赖关系在所有类路径中均可用。此外,这些依赖项会传递到相关项目

provided:仅在编译和测试类路径上可用,并且不可传递。希望JDK或容器在运行时提供它

runtime:依赖关系不是编译所必需,而是运行所必需的。它在运行时和测试类路径中,但不在编译类路径中

test:依赖关系对于正常使用该应用程序不是必需的,并且仅在测试编译和执行阶段可用。它不是可传递的

system:必须显式提供 jar 的位置(可以通过 systemPath 标签指定),不会去 Maven 仓库中查找

Maven 常见操作

初始化配置:环境变量、仓库位置、配置镜像

先配置 JAVA_HOME,然后配置 MAVEN_HOME,添加 %MAVEN_HOME%/bin 到 PATH 中


修改仓库位置:在 %MAVEN_HOME%/conf/settings.xml<settings> 标签中添加1个 <localRepository>

<localRepository>F:\Dev\Java\.m2\repository</localRepository>

提高仓库的下载速度:在 %MAVEN_HOME%/conf/settings.xml<mirrors> 标签中添加1个 <mirror>

<mirror><id>aliyun</id><name>aliyun</name><url>https://maven.aliyun.com/repository/public</url><mirrorOf>central</mirrorOf>
</mirror>

修改 Maven 的 JDK 版本

方法 1:在 pom.xml 中添加属性(每个 Maven 项目都要添加)

<properties><maven.compiler.source>14</maven.compiler.source><maven.compiler.target>14</maven.compiler.target><maven.compiler.compilerVersion>14</maven.compiler.compilerVersion>
</properties>

方法 2:在 pom.xml 中添加插件(每个 Maven 项目都要添加)

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>14</source><target>14</target></configuration>
</plugin>

方法 3:在 %MAVEN_HOME%/conf/settings.xml<profiles> 标签中添加 1 个 <profile>

这是一种一劳永逸的办法,不需要去修改每一个 Maven 项目的 pom.xml,但其他人可能无法运行该项目

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

命令行新建 Maven 项目

方法 1

  • 在命令行输入:mvn archetype:generate,会让我们选择项目类型
  • 默认值是 7, maven-archetype-quickstart,是一个普通的 Java 项目
  • 如果希望创建一个 web 项目,输入 10, maven-archetype-webapp

    输入 groupId、artifactId、version、package
    如果希望 version、package 使用默认值,直接敲回车即可

    最后输入 y 表示确认,项目就创建完毕了

方法 2:用命令行配置好创建项目的各种参数

mvn archetype:generate -DgroupId=com.mj.maven -DartifactId=helloworld -Dversion=1.0-RELEASE -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-quickstart

IDEA 导入 Maven 项目

选择 pom.xml 进行导入

IDEA 新建 Maven 项目(Web 项目)



生成 Runnable Jar

方法 1:maven-jar-plugin

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>3.0.2</version><configuration><archive><manifest><addClasspath>true</addClasspath><classpathPrefix>lib</classpathPrefix><mainClass>主类</mainClass></manifest></archive><finalName>jar的文件名</finalName></configuration>
</plugin>
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-dependency-plugin</artifactId><version>3.1.2</version><executions><execution><!-- <phase>package</phase> --><goals><goal>copy-dependencies</goal></goals><configuration><outputDirectory>${project.build.directory}/lib</outputDirectory></configuration></execution></executions>
</plugin>

方法 2:maven-assembly-plugin

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId><version>3.3.0</version><configuration><archive><manifest><mainClass>主类</mainClass></manifest></archive><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs><finalName>jar的文件名</finalName><appendAssemblyId>false</appendAssemblyId></configuration><executions><execution><phase>package</phase><goals><goal>single</goal></goals></execution></executions>
</plugin>

方法 3:maven-shade-plugin

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><version>3.2.3</version><executions><execution><!-- <phase>package</phase> --><goals><goal>shade</goal></goals><configuration><shadedArtifactAttached>true</shadedArtifactAttached><transformers><transformerimplementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"><mainClass>主类</mainClass></transformer></transformers><finalName>jar的文件名</finalName></configuration></execution></executions>
</plugin>

方法 4:spring-boot-maven-plugin

<plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.3.0.RELEASE</version><executions><execution><!-- <phase>package</phase> --><goals><goal>repackage</goal></goals><configuration><mainClass>主类</mainClass><finalName>jar的文件名</finalName></configuration></execution></executions>
</plugin>

安装本地 jar 到 Maven 的 LocalRepository

这个操作是为了解决 Maven 中央仓库没有某些需要的 Jar 包的情况

mvn install:install-file -Dfile=jar的路径 -DgroupId=组织 -DartifactId=库名 -Dversion=版本 -Dpackaging=jar

Maven 常见问题解决

文件编码的警告:Using platform encoding

如果通过 Idea 部署的 Tomcat 打包不会出现问题,通过 Maven 打包会出现问题

解决方案:在 pom.xml 中添加项目编码

<properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

控制台输出乱码


解决方案:
Settings -> Build, Execution, Deployment -> Build Tools -> Maven -> Runner
在 VM Options 中添加 -Dfile.encoding=GBK

【Java从0到架构师】Maven相关推荐

  1. 【Java从0到架构师】Maven - 依赖冲突、分模块构建项目

    SpringBoot - Maven 补充 依赖冲突 解决方案 - dependencyManagement 自定义属性 分模块构建项目 继承 - parent 聚合 - modules 依赖 - d ...

  2. 【Java从0到架构师(1),Java中高级面试题总结(全面)

    JSP 九大内置对象 MySQL 基础 + 多表查询 [Java从0到架构师]MySQL 基础 MySQL MySQL 的使用步骤 数据库的内部存储细节 GUI 工具 SQL 语句 DDL 语句 DD ...

  3. 【Java从0到架构师】SpringCloud - Eureka、Ribbon、Feign

    SpringCloud 分布式.微服务相关概念 微服务框架构选型 SpringCloud 概述 服务注册与发现 - Eureka 案例项目 Eureka 自我保护机制 微服务调用方式 - Ribbon ...

  4. 【Java从0到架构师】RocketMQ 基础 - 应用、核心组件、安装

    RocketMQ 消息中间件 基础知识 消息中间件的应用 异步解耦 削峰填谷 消息分发 RocketMQ 核心组件 RocketMQ 安装 源码安装 修改配置参数 启动 管理控制台安装 测试项目 Ja ...

  5. 【Java从0到架构师】分布式框架通信核心基础 - 序列化(JDK、Protobuf)、远程过程调用 RMI

    分布式框架通信核心基础 序列化 JDK 的序列化 JDK 序列化的一些细节 Protobuf 序列化 Protobuf 环境搭建与操作 Protobuf 原理分析 实际数据传输 序列化技术选型 远程过 ...

  6. 【Java从0到架构师】Redis 进阶 - pipline、发布订阅、Bitmap、HyperLogLog、GEO

    Redis 原理与实战 Jedis 的基本使用 Redis 数据淘汰策略 Redis 进阶拓展 pipline - 命令批处理,减少大量命令的网络开销,提高操作性能 发布订阅 - subscribe ...

  7. 【Java从0到架构师】SpringBoot - 入门_配置文件_YAML

    SpringBoot - 入门_配置文件_YAML SpringBoot - 入门 @SpringBootApplication 可运行 jar - spring-boot-maven-plugin ...

  8. 【Java从0到架构师】SSM 整合(XML、纯注解)

    SSM 整合 父子容器 父子容器的配置文件建议 子容器的加载创建 父容器的加载创建 MyBatis 补充 mybatis-config.xml Maven 补充 SSM 整合 - 纯注解 Initia ...

  9. 【Java从0到架构师】SpringMVC - 返回值

    SpringMVC - 返回值 controller 中的返回值 无返回值 - 使用原始的 Servlet 的方法 普通文本.HTML - 设置响应头 Content-Type XML - 推荐使用 ...

最新文章

  1. centos7快速搭建LAMP
  2. spring web参数传递
  3. 他山之石可以攻玉, 不可不读的阿里云原生中间件行业案例与实践集锦
  4. 第17讲:aiohttp 异步爬虫实战
  5. 计算机硬件系统都是看得见的,计算机组成硬件系统).doc
  6. android jni framework,Android Framework层的JNI机制(二)
  7. 用tensorflow实现最简单的神经网络
  8. 刚才看到一篇文章,感觉不错,转载过来和大家分享:
  9. 中学图书室管理用计算机,中学“学生电子阅览室管理制度”
  10. Hadoop AWS Word Count 样例
  11. 基于PHP的在线聊天室(网页版)
  12. Electron 打包时下载 xxx-electron-v1.6.8-arch-x64.zip 文件出错
  13. android 音量流类型,android 音量控制setVolumeControlStream
  14. Nature:分离到一种位于原核生物-真核生物“交界”的古菌
  15. STM32+QRCode二维码生成
  16. QQ互联登录- 前端为 vue.js
  17. Excel长串数字显示异常,如2E+13
  18. noip模拟赛 终末
  19. 微型计算机汇编语言与接口技术课后答案,微机原理、汇编语言及接口技术教程课后习题答案...
  20. 复旦大学和吉大计算机考研选哪个,复旦综合实力强,但这个学科比不上吉大,考生该怎么报考...

热门文章

  1. 多目标跟踪全解析,全网最全
  2. anaconda安装pytorch1.7.1和torchvision0.8.2的方法,亲测可用
  3. ssrs行高_SSRS中的备用行颜色
  4. 了解SQL Server CASE语句
  5. sql server复制表_具有超过246列的表SQL Server复制
  6. sql还原数据库备份数据库_有关数据库备份,还原和恢复SQL面试问题–第二部分
  7. azure云数据库_使用Azure Active Directory和Azure SQL数据库
  8. 201671010430 司昕劼 实验十四 课程学习总结
  9. python—004
  10. innerHTML和outerHTML的区别