Maven知识经验总结
自从上班后,好久没有花时间来沉淀相关的知识了,这篇文章就来总结一下我的maven知识体系吧。本章节不会以初学者角度来介绍maven而是站在总结的角度分析maven
前言
在java开发中最常用的就是Maven工程的开发,想起了刚开始接触到maven时,还认为maven太麻烦了,不想学,后面随着学习的深入,才渐渐明白maven可以极大的提高开发效率的。在没有用上maven前我还是到处百度,去寻找各种依赖jar包来开发。想想那时…
一、Maven常用控制台命令
1. 清除编译文件
mvn clean
2. 对项目进行编译,将.java类编译为.class文件
mvn compile
3. 测试命令(要有测试源码才可以)
mvn text
4. 打包命令
mvn package
- 如果项目中有很多子项目的话【如微服务项目】,可以在总项目中运行这个打包命令;运行后就在进入子项目中,找到jar文件执行
java -jar xxx-user-api.jar
即可启动各个微服务的子项目
5.maven
安装本地jar包
-
这个很有用,很多时候项目jar包老是报错,说未找到某个jar包,这时就可以找同时,加他拷贝它本地jar给我如何安装了
(1) 步骤一:查看当前idea 的maven用的是idea自带的还是自己本地的,别安装错了,不然搞了半天发现没反应;
(2)步骤二: 查看报错的依赖坐标
<dependency> <groupId>com.xx1.xxx2</groupId> <artifactId>ggggxx</artifactId> <version>1.2</version> </dependency>
(3)第三步根据坐标信息写cmd命令
mvn install:install-file -Dfile=D:\xxx\xxx\ggggxx-1.2.jar -DgroupId=com.xx1.xxx2 -DartifactId=ggggxx -Dversion=1.2 -Dpackaging=jar
- jar包当前放置路径:
D:\xxx\xxx\ggggxx-1.2.jar
DgroupId: com.xx1.xxx2
DartifactId : ggggxx
Dversion
:版本号
- jar包当前放置路径:
快速生成
cmd
命令JavaScript脚本,懂的可以丢到浏览器控制台的代码片段里边执行
let xmlStr=`<dependency>
<groupId>com.xx1.xxx2</groupId>
<artifactId>ggggxx</artifactId>
<version>1.2</version>
</dependency>`
const parser = new DOMParser();
const doc = parser.parseFromString(xmlStr, "application/xml");
const groupId = doc.querySelector("groupId").textContent;
const artifactId = doc.querySelector("artifactId").textContent;
const version = doc.querySelector("version").textContent;
let cmd= `mvn install:install-file -Dfile=D:\\xxx\\xxx\\${artifactId}-${version}.jar -DgroupId=${groupId} -DartifactId=${artifactId} -Dversion=${version} -Dpackaging=jar`
二、Maven各种标签详情
标签 | 说明 |
---|---|
modelVersion | 指定了当前POM模型的版本 |
modules>module | 用来管理同个项目中的各个模块 |
properties | 版本管理,下边的标签可以自定义 |
dependencyManagement>dependencies>dependency | 提供一种管理依赖版本号的方式,用这个后在子项目中再次引入依赖jar包时则无需在写版本号 |
groupId | 项目域名 |
artifactId | 实际应该是项目名-模块名 |
packaging | 在父级项目中的pom.xml文件使用的packaging配置一定为pom;当参数设置为jar 时 运行会生成jar 包;还有war |
build | 描述了如何编译及打包项目,具体的编译和打包工作 |
repositories | 指定仓库位置 |
1. 标签详解
插件 | 作用 |
---|---|
maven-clean-plugin | 清理上一次执行创建的目标文件 |
maven-resources-plugin | 处理资源文件和测试资源文件 |
maven-compiler-plugin | 编译原文件和测试源文件 |
maven-surefire-plugin | 执行测试文件 |
maven-jar-plugin | 创建jar |
maven-install-plugin | 安装jar,将创建生成的jar拷贝到m2下面 |
maven-deploy-plugin | 发布jar |
三、Maven高级
1.坐标的概念
groupId:组织标识,一般为:公司网址的反写+项目名
artifactId:项目名称,一般为:项目名-模块名
version:版本号 形式为0.0.1-SNAPSHOT:
第一个 0 表示大版本号,第二个 0 表示分支版本号,第三个 0 表示小版本号
SNAPSHOT -- 快照版本
ALPHA -- 内侧版本
BETA -- 公测版本
RELEASE -- 稳定版本
GA -- 正式发布
packaging:打包的方式,如:pom, jar, maven-plugin, ejb, war
clissifier:用来帮助定义构件输出的一些附属构件。
2. 依赖范围
依赖范围的使用,通过在引用第三方依赖时的<scope></scope>
标签进行设置
- 包括:compile、provided、runtime、test、system、import。 只在测试中使用,则选择test即可,默认为compile
3. 打包问题
maven打包时,默认不会将第三方依赖包打进来。可以在
pom.xml
中添加maven-assembly插件实现
<build>
<plugins>
<!-- Maven Assembly Plugin 打包依赖进去 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4.1</version>
<configuration>
<!-- get all project dependencies -->
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<!-- 如果运行中出现 jar中没有主清单属性 问题 -->
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>org.test.MainApp</mainClass> <!-- 此处为主入口-->
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<!-- bind to the packaging phase -->
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>