一、Maven简介
Maven是一种项目管理工具,让你方便的管理各种依赖,与之类似的还有Gradle。
参考文章或视频链接 |
---|
[1] Java 项目的构建工具 Maven |
二、Maven安装
参考文章或视频链接 |
---|
[1] 史上最详细的Maven安装与配置 |
[2] Maven下载地址 |
三、Maven基础
1.3 Maven的生命周期
1.4 项目命名准则
好的项目命名将使你快速了解这个jar包的含义,请参考以下方式
<version>${base.version}.${yourSdk1.version}.${yourSdk2.iterations}</version>
<properties>
<maven.compiler.source>6</maven.compiler.source>
<maven.compiler.target>6</maven.compiler.target>
<base.version>11</base.version>
<yourSdk1.version>1.3</yourSdk1.version>
<yourSdk2.version>${base.version}.${yourSdk1.version}.1</yourSdk2.version>
</properties>
Maven的多继承用法
参考文章或视频链接 |
---|
[1] maven多继承和继承链 |
[2] maven中的如何实现——多继承 |
[3] maven工程中的多继承 |
四、Maven进阶
什么是scope属性?
Maven 项目可以分为三个阶段:编译,测试,运行。
scope | 解释 | 作用 |
---|---|---|
compile(default) | 依赖参与项目的编译,测试,运行阶段。项目打包之后将会包含该依赖 | 所有使用compile的依赖都会被打入jar包 |
provided | 依赖仅参与项目编译,测试的阶段 | 意味着你需要自行导入依赖 |
runtime | 依赖仅参与项目测试,运行阶段。 | 不参与编译阶段 |
test | 依赖仅参与测试阶段的工作。典型的例子为 junit。 | |
system | system 与 provided 范围一致,只不过 system 需要使用 systemPath 属性指定本地路径,而 provided 将会从 Maven 仓库拉取。 | |
import |
参考文章或视频链接 |
---|
[1] Maven的scope属性 |
dependency、dependencies、dependencyManagement的区别是什么?
参考文章或视频链接 |
---|
[1] dependencyManagement,dependencies,dependency区别 |
[2] Differences between dependencyManagement and dependencies in Maven - StackOverFlow |
[3] Maven dependencyManagement vs. dependencies Tags |
如何保持依赖包为最新?
<dependency>
<groupId>wonderful-inc</groupId>
<artifactId>dream-library</artifactId>
<!--获取最新的release版-->
<version>RELEASE</version>
<!--获取最新的release版或snapshot版,snapshot为快照版,不一定是对外正式提供的版本-->
<version>LATEST</version>
</dependency>
参考文章或视频链接 |
---|
[1] How do I tell Maven to use the latest version of a dependency? - stackoverflow |
如何跳过test阶段(即test中的代码不会被打入jar包)?
在右侧的maven中,找到一个蓝色⚡符,鼠标移到下面,显示Toggle ‘Skip Tests’ Mode,很多打包失败的情况,先试试排除掉test文件夹下的代码,因为如果某个项目是开源的,基本都是多人开发,test中的某些东西编译不一定保证正确。
如何自定义resources文件夹下的某些内容不被打包?
<!--同理,你可以使用这段配置,过滤掉很多你自定义的文件夹以及文件-->
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<!--在这里定义好你要include的文件-->
<includes>
<include>**/**</include>
</includes>
<filtering>true</filtering> <!--true表示过滤掉你所includes的的文件-->
</resource>
</resources>
</build>
如何将依赖包也编译至要打的jar包中?
你有三个插件可选:maven-jar-plugin
、maven-shade-plugin
或maven-assembly-plugin
。
参考文章或视频连接 |
---|
maven-shade-plugin《Maven uber-jar(带依赖的打包插件)maven-shade-plugin》 |
maven-assembly-plugin《java——maven多模块项目打jar包如何把依赖包也打包进去》 |
maven-assembly-plugin《maven 打成可运行jar_qeiwang的博客-CSDN博客》 |
三者的比较:When to use maven jar, maven assembly or maven shade |
如何手动添加Maven依赖到本地仓库?
以下面的Maven依赖为例
<dependency>
<groupId>org.apache.phoenix</groupId>
<artifactId>phoenix-core</artifactId>
<version>4.13.2-cdh5.11.2</version>
<scope>provided</scope>
</dependency>
其中,这个phoenix-core-4.13.2-cdh5.11.2.jar
是你从某不知名网站上,好不容易找到的jar
包
mvn install:install-file -Dfile=F:/Projects_zbDependency/project-jdbcProxy/jdbc-proxy-phoneix/lib/phoenix-core-4.13.2-cdh5.11.2.jar -DgroupId=org.apache.phoenix -DartifactId=phoenix-core -Dversion=4.13.2-cdh5.11.2 -Dpackaging=jar
参考文章或视频连接 |
---|
[1] 手动导入Maven依赖 |
五、Maven排错
IDEA与Maven版本不合
当版本不和,可能导致以下错误,需要查看日志解决,你可以选择升级IDEA或降级Maven
参考文章或视频链接 |
---|
Unable to import maven project: See logs for details |
IDEA 2019.1.3 与 Maven3.6.3不合 |
IDEA版本与MAVEN版本对应关系 |
maven打包遇到问题如何查找
1.在IDEA中,File -> Settings -> Build, Execution, Deployment -> Build Tools -> Maven
2.勾选Print exception stack traces ,并且Output level 选择为Debug级别。
这样在maven打包时,就会输出最详细的信息,供你查询。
Duplicate zip entry
参考文章或视频链接 |
---|
Duplicate zip entry问题解决 |
maven打包遇到依赖冲突
当maven打包遇到了依赖冲突时,要找准,是什么包遇到了依赖冲突,此时需要利用maven打包遇到问题如何查找去查找包名。
1.找到包名
2.确定要排除的包以及版本
3.在其父依赖中,进行排除。
比如
<!--
nacos-client的依赖中用到了fastjson,但是与其它包的依赖产生了冲突,而且我们不想要nacos-client的这个fastjson依赖,所以在其依赖中进行<exclusions></exclusions>排除
-->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>1.1.0</version>
<exclusions>
<exclusion>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</exclusion>
</exclusions>
</dependency>
Maven打包遇到Base64相关问题或者找不到相关的rt.jar包
遇到这个问题,一般是涉及到了一些加密算法,而这些加密算法是sun公司的私有
参考网址
参考文章或视频链接 |
---|
1.Maven Repository Maven中央仓库 |