我本人使用的是idea,在刚开始配置时,在下图指定地方进行全局设置。

A、 缺失包

这个是最不能接受的了,mvn直接不去下该下的包,然后你发现IDE自己也不去下,也不告诉你原因。。然后大家的解决办法就是选择去命令行无脑clean或者是重新导入再重新让mvn下?还是来探究一下。。

先检查包是否是私有包(或版本不是官方的,自己修改过,检查方法参考步骤3)

检查本地仓库是否存在 (去.m2/repository看)

检查你目前的远程库(默认是官方库)是否有你的包/版本(查询地址)

查看mvn配置是否出错

刷新…重新导入试试

还可以用脚本文件去清理一下本地的maven仓库

如果在导入jar包时,明明已经finished,但还是一直在加载,那么就可以修改IDEA中maven的配置信息,如importing信息

B、 包冲突

这可能是很头疼的事之一,因为java项目依赖的包很多,版本号也点的飞起,导致有冲突经常调来调去,一个项目调好了另一个又报错了。。 这里来清晰的理一下思路,避免拆东墙补西墙出现。

我的思路:

IDEA下安装mvn-tree插件,看杂乱的xml文件简直要狗带,然后快速显示id,版本号等标识信息

先确认是否项目使用了非官方/内部包,那肯定是会出错的,好比你自己定义了个新函数。。

排除了低级错误之后, 一般大点的项目,都会很很多个module, 然后每个模块都有个pom.xml ,那肯定会有大家共同使用了一个包,但是版本不同的情况. 这会导致什么呢? (通过mvn-tree插件查看)

包依赖的java版本不同,但是你最后运行程序肯定只有一个Java环境. 一般高版本可以兼容低版本.

包版本不同,可能导致函数有些调用方法不存在或者改名字了. 那就要看优先使用的是高,还是低版本的jar包。

C、 打包和发布

首先,我们把Java程序的编译打包过程搞清楚. 不是上来就对着mvn命令去敲,出了问题再去临时查查….

我们编写的xx.java , 要通过java虚拟机编译为xx.class 字节码,这一步我们称之为编译 ,

class文件汇聚在一起,可以打包为一个xx.jar/war . (如果java文件更新了,那么必须得重新编译)

再看看IDEA默认生成maven项目的结构:

src 文件夹:

main : 代码类

test :对应main结构的各种Test类

resources(可选): 放配置文件

pom.xml

再看看mvn的命令本质:

maven能执行各种操作,包括clean,install,package,assembly本质(我理解)都是调用的模块,底层估计就是java写的代码插件一样…. 比如打jar包模块,打war包模块, 整合打包模块,清理脚本… 只不过有些模块是内置的. 不需要你单独去导入.

D、打包

1.直接打包当前项目代码

首先需要在pom.xml配置编译模块 (注意模块选择有好几个,各自有侧重–比如专门把依赖一起整合的)

org.apache.maven.plugins

maven-compiler-plugin

1.8

1.8

常用命令是:

#跳过测试打包到target/下.包名为pom文件中定义的"artifactID-version"

mvn package -DskipTests

#如果希望提前先清理一下target/目录,或者直接覆盖生成包. 注意这样会清掉原本所有的包.慎用

mvn clean package -DskipTests

执行完成后,在target下加入有一个demo-1.0.jar 的包. 它的内部结构是什么呢?

com (里面是对应的子文件夹,具体是class文件)

META-INF (里面有pom.xml文件和自动生成的pom.properties记录了基本的版本K-V)

xx.properties (都在根目录,对应的是之前maven项目的resources文件夹下内容)

E、出现红线

1、查看maven配置路径是否正确

.
2、查询本地仓库 ,如果存在 。

2.1、从POM文件中,将对应的信息进行移除!

2.2、执行Maven操作:clean,

2.3、将原先依赖重新填写到POM文件中