maven的简单理解
Maven安装与配置
Maven安装与配置,详情见:https://www.yiibai.com/maven/maven_environment_setup.html
Maven中央仓库
Maven默认的中央仓库在国内连接会比较慢,可以在Maven的setting.xml中换成阿里云中央仓库,或者公司的私服仓库。
详情见:https://www.cnblogs.com/xxt19970908/p/6685777.html
Maven基本概念
Maven生命周期
清理clean:将以前编译得到的旧文件class字节码文件删除
编译compile:将java源代码编译成class字节码文件
测试test:自动测试,自动调用junit程序
报告report:测试程序执行的结果
打包package:动态Web工程打War包,java工程打jar包
安装install:将target下的jar安装到本地仓库,可以供其他项目使用。
部署deploy:将模块生成的包复制到Maven仓库下,可以提供给其他模块使用。
假如 A模块依赖于 B模块,B模块修改之后,可以拉取最新的代码,然后 deploy一下B模块,这样A模块就能读取最新的B模块代码了。
Maven常见命令
mvn clean //在target文件夹中的一切都将被删除
mvn compile //编译源代码
mvn test //运行应用程序中的单元测试
mvn package //把jar打到本项目的target下
mvn install //把target下的jar安装到本地仓库,供其他项目使用.
mvn clean package //清除target文件夹的文件,并重新将项目打包
mvn clean compile //清除target目录中的生成结果,将.java类编译为.class文件
mvn clean test //清除target目录中的生成结果,执行单元测试
mvn clean deploy //清除target目录中的生成结果,部署到版本仓库
mvn clean install //清除target目录中的生成结果,使其他项目使用这个jar,会安装到maven本地仓库中
常用maven命令总结:
mvn -v //查看版本
mvn archetype:create //创建 Maven 项目
mvn test-compile //编译测试代码
mvn site //生成项目相关信息的网站
mvn package //依据项目生成 jar 文件
mvn install //在本地 Repository 中安装 jar
mvn -Dmaven.test.skip=true //忽略测试文档编译
mvn clean //清除目标目录中的生成结果
mvn archetype:generate //创建项目架构
mvn dependency:list //查看已解析依赖
mvn dependency:tree //看到依赖树
mvn dependency:analyze //查看依赖的工具
mvn help:system //从中央仓库下载文件至本地仓库
mvn help:active-profiles //查看当前激活的profiles
mvn help:all-profiles //查看所有profiles
mvn help:effective -pom //查看完整的pom信息
在Intellij IDEA中配置Maven
详情见:https://blog.csdn.net/qq_32588349/article/details/51461182
IDEA中使用Maven
点击最左边的刷新按钮,可以重新引入所有的 maven依赖。
点击 m,可以运行maven命令。
点击 lifecycle,可以运行 maven生命周期的命令。
IDEA的Maven打包常用命令:
clean package -Pdev -DskipTests : -P后面是环境变量,可改选择dev开发环境,或其他环境进行打包。-DskipTests表示跳过测试。
Maven跳过 测试
点击以下的蓝色按钮,可以让Maven跳过测试。
Maven的 pom.xml
pom是Project Object Model(项目对象模型)的缩写,是Maven中的项目文件,可用于管理与配置依赖及版本。
<modelVersion>
modelVersion 指定了当前POM模型的版本,对于Maven2及Maven 3来说,它只能是4.0.0.
<modelVersion>4.0.0</modelVersion>
<groupId>
<groupId>表示项目所属的组,通常是一个公司或者组织的名称,如org.springframework.
<artifactId>
<artifactId>表示项目的唯一标识.
<version>
version:项目的版本。比如 <version>1.0-SNAPSHOT</version>版本号的后缀意味着项目的不同阶段:
SNAPSHOT:开发中的版本
RELEASE:正式发布版
M1,M2:M指里程碑,表示即将发布
RC:Release Candidate,发布候选
GA:General Availablity,基本可用版本
<parent> (继承)
<parent>: 指定父级的模块,子模块可以使用父级模块的依赖。类似于 java中的继承。
比如指定 parent 为 spring-boot-starter-parent,引入spring-boot的依赖。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
另外的,一个项目中经常会有 common、dao、 service等模块。
一些共用的工具类可以放到 common模块中,然后在各个模块中指定parent为 common模块,
这样的话,其他模块就可以统一调用common中的类和方法,不用重复写工具类了。
<modules> (多模块)
maven-demo
聚合了五个工程。
聚合之前打包client,dao ,manager,service, 需要分别运行 mvn package。
聚合之后,只需要在 maven-demo 下运行 mvn package即可。
<project >
<artifactId>maven-demo</artifactId>
<modules>
<module>test-client</module>
<module>test-dao</module>
<module>test-manager</module>
<module>test-service</module>
</modules>
</project>
Profiles
Maven的Profiles,可以指定运行环境,比如dev开发环境、sit测试环境、par灰度环境、prod生产环境。
我们可以在IDEA中切换运行环境。如下图所示,
Maven的pom.xml中,Profiles配置如下:
其中的 <activeByDefault>true</activeByDefault> 表示默认使用的环境。
<profiles>
<profile>
<id>dev</id>
<properties>
<profileActive>dev</profileActive>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>sit</id>
<properties>
<profileActive>sit</profileActive>
</properties>
</profile>
<profile>
<id>pro</id>
<properties>
<profileActive>pro</profileActive>
</properties>
</profile>
</profiles>
Profiles详情见: https://www.cnblogs.com/0201zcr/p/6262762.html
<properties>
可以在properties标签中,统一管理各个依赖的version版本。
然后通过 <version>${ }</version> 调用 。
<properties> <java.version>1.8</java.version> <es.version>5.4.1</es.version> <elasticsearch.version>5.4.1</elasticsearch.version> <fastjson.version>1.2.70</fastjson.version> </properties>
<dependencies>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>${es.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
</dependencies>
<dependency>
<dependency>用于引入依赖(jar包),是最常用的。示例如下:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
<groupId> :表示依赖包所属的组,通常是一个公司或者组织的名称,如org.springframework.
<artifactId>:表示依赖包的唯一标识。
<version>:表示依赖包的版本号。
<scope>:表示依赖包的作用范围。scope含义如下:
compile:scope 默认取值 compile 标识,当前依赖包,参与项目的编译、运行、测试、打包。
runtime: runtime 标识不参与项目编译,参与项目的运行、测试、打包。
provided:provided 标识参与项目的编译、运行、测试,但是不参与打包。
test: test 标识只在编译测试代码和运行测试代码的时候需要,别的都不用,打包的时候也不会包含。
<build>
Maven的插件(plugin)可以在<build>中配置。
maven-assembly-plugin 这个plugin是用来帮助打包的。可以打包成jar包、war包。
maven-assembly-plugin 的详情见: https://www.cnblogs.com/expiator/p/9926428.html
assembly相关的maven命令: mvn clean compile assembly:single //打包只生成一个jar包,名字里有jar-with-dependencies,可执行。
maven-assembly-plugin 示例如下:
<build> <plugins> <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <appendAssemblyId>false</appendAssemblyId> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <mainClass>com.example.demo.test</mainClass> </manifest> </archive> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>assembly</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
Maven仓库网址
需要添加依赖的时候,可以去以下网址找相关的dependency依赖。
https://mvnrepository.com/
pom.xml示例:
pom.xml文件 ,示例如下:
<?xml version="1.0" encoding="UTF-8"?> <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.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.4</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>org.example</groupId> <artifactId>Utils</artifactId> <version>1.0-SNAPSHOT</version> <properties> <java.version>1.8</java.version> <es.version>5.4.1</es.version> <elasticsearch.version>5.4.1</elasticsearch.version> <fastjson.version>1.2.70</fastjson.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>${es.version}</version> </dependency> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>transport</artifactId> <version>${es.version}</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>${fastjson.version}</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> </plugin> </plugins> </build> </project>
参考资料
https://juejin.cn/post/6844904182487449614