目录

  • 1. Maven导致的问题
  • 2. 常用maven参数

1. Maven导致的问题

  1. 明明本地仓库有包,但是执行Install还是报错
  • 分析:很有可能是maven仓库中每个依赖目录下 _remote.repositories 文件导致的,这个文件在下载到依赖或者执行Install命令时产生,记录当前依赖是从哪个远端maven仓库中下载的,执行mvn命令的时候就会对比本地仓库的依赖文件和记录的远端仓库的文件是否保持一致。这就是问题所在,一旦连接不到远端仓库或者远端仓库把依赖移除了,就会导致依赖报错。
  • 解决:
  1. 最简单的方式就是直接移除有问题的依赖包下的 _remote.repositories 文件。
  2. 其次就是编辑这个文件,从settings.xml中找到包含此依赖的远端仓库,从文件中用可用仓库标识替换掉不可用仓库的标识。
  1. 配置的setttings.xml中并没有配置远端镜像或者仓库,但是每次命令都会去远端仓库进行下载
  • 分析:一般遇到这种情况是因为maven的安装目录中conf文件夹下包含一个settings.xml文件,导致执行命令时将此配置中的远端仓库或者镜像也融合进来了。
  • 解决:
    一般遇到这个问题,我的建议是将所有有用的配置文件放置到 %userprofile%\.m2 目录下,安装目录下的conf文件夹中就不要保留配置文件了,否则可能会遇到一些问题。
  1. 下载失败的依赖无法再次下载
  • 分析:遇到这种问题一般是因为配置了不存在的依赖(或版本)、配置的远端仓库没有收录此依赖包、还有小部分是因为网络波动导致下载失败,导致本地仓库中依赖目录下生成了 依赖名.lastUpdated 文件,此时即便再重新让maven下载依赖,也有大概率maven看到有这个失败文件就会直接跳过。
  • 解决:
  1. 首先检查pom.xml中配置的依赖是否名称、版本号正确,建议去 mvnrepository 中检查。
  2. 其次检查settings.xml中配置的远端仓库中是否存在需要的依赖包文件。
  3. 最后到本地仓库中找到需要重新下载的依赖目录,将所有扩展名为 .lastUpdated 文件全部删除,然后重新执行命令下载依赖。
  1. 本地仓库中明明已经存在了依赖包,但是还是会执行从远端仓库下载的动作
  • 分析:一般这种情况是因为没有添加离线参数导致。只要开启离线模式,就只会使用本地maven仓库中的依赖文件执行命令。
  • 解决:
    在执行的mvn命令中添加 -o 参数即可。

2. 常用maven参数

  1. -o 或 --offline
    即 Work offline ,以离线模式运行,仅依靠本地maven仓库运行。
  2. -Dmaven.test.skip=true
    不执行测试用例,且不编译测试用例类。最彻底。
  3. -DskipTests
    不执行测试用例,但是会编译测试用例类到target/test-classes中。
  4. -Dmaven.compile.fork=true
    开启maven多线程编译。多线程编译有一定的效果,但是需要每个模块的依赖关系结构非常合理且明晰,否则maven难以处理非常复杂的结构从而导致多线程编译失败。
  5. -T 1C
    指定使用多少个线程来执行多线程编译,需要3.x以上版本才支持。1C指的是当前处理器的全部线程数量,也可以将1C替换成数值来指定几个线程来同时编译,比如-T 8就是最多8线程。