Java技术栈——构建工具Maven

一、Maven简介

Maven是一种项目管理工具,让你方便的管理各种依赖,与之类似的还有Gradle

参考文章或视频链接
[1] Java 项目的构建工具 Maven

二、Maven安装

参考文章或视频链接
[1] 史上最详细的Maven安装与配置
[2] Maven下载地址

三、Maven基础

1.3 Maven的生命周期

LifeCircle
clean
validate
compile
test
package
verify
install
site
deploy

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。
systemsystem 与 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-pluginmaven-shade-pluginmaven-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包

com…internal相关jar包问题

遇到这个问题,一般是涉及到了一些加密算法,而这些加密算法是sun公司的私有

参考网址

参考文章或视频链接
1.Maven Repository Maven中央仓库
  • 22
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值