dos啥也不会

以需求为导向学习

maven配置

主要内容

内网开发/访问maven中央仓库困难情况下配置maven,maven使用过程中的一些配置

安装maven

maven无需安装,只要将压缩包下载解压到合适地方,并确保jdk已经安装并配置正确的环境变量即可
此时只要执行/path/to/maven/bin/mvn加上相应命令参数即可,如果将/path/to/maven/bin添加到环境变量,直接使用mvn即可

settings.xml

默认情况下在/path/to/maven/conf目录下有一个settings.xml文件,这个文件是在命令行使用mvn命令时默认读取的配置,如果使用IDE,例如eclipse,IDEA,则在对应软件内有设置可以覆盖改文件

eclipse Windows-Preferences-Maven-User Settings,可以设置全局和项目级别的
IDEA 全局设置需要关闭打开的项目,然后在 自定义-所有设置中打开设置界面,项目级设置在打开项目的情况下选择文件-设置打开设置界面
打开设置界面后在 构建、执行、部署-构建工具-maven下修改

修改本地仓库地址

默认情况下依赖jar包会下载到~/.m2目录下,为了方便管理可以修改settings.xml文件中的localRepository属性的值,例如D://java_workspace/m2repository(win)/var/m2repository(*unix)

添加镜像仓库

mirrors标签下添加镜像站点,如果是内网开发直接填写一个镜像即可,如果是在公网开发,但是涉及私有包的情况下就需要填写多个镜像.填写镜像的格式为

1
2
3
4
5
6
<mirror>
<id>huaweicloud</id>
<name>huawei maven</name>
<url>https://repo.huaweicloud.com/repository/maven/</url>
<mirrorOf>*</mirrorOf>
</mirror>

其中idname可以随意填写,mirrorOf指定该镜像地址可以提供哪些组的依赖,可以用这个参数控制私有包和第三方包分别走那个镜像地址.具体用法可以参考官方文档

https://maven.apache.org/guides/mini/guide-mirror-settings.html#Advanced%20Mirror%20Specification

依赖配置

与依赖相关的标签<dependencyManagement>,<dependencies>,<scope>,<optional>其中<scope>标签默认为compile,<optional>标签默认为false

  • <dependencyManagement>标签一般用于在父模块中统一管理子模块的依赖版本
  • <dependencies>标签用于在父模块中添加全局依赖或者在子模块中添加自己的依赖
  • <scope>标签用于指定依赖的使用范围,默认为compile,如果使用了<optional>标签,则该依赖不会被添加到子模块的类路径中
  • <optional>标签用于指定依赖是否是可选的,如果使用了该标签,则该依赖不会被添加到子模块的类路径中

依赖优化

正常使用的时候一般无需在意<scope><optional>,但是如果是编写工具jar则需要注意这两个标签的属性,例如需要开发一个jdbc驱动的时候那么势必需要引入不同数据库的jdbc驱动,那么这些驱动的scope属性可以设置为provided,这样只需要在应用中生命使用到的jdbc驱动即可.另一个例子是lombok,lombok在编译期间生效,所以相关jar不必带入最终的可执行jar中,所以lombok的scope属性也设置为provided.另外还有一些包只在测试阶段使用,这些包可以设置为test,以及由web服务器提供的jar包,这些包也可以设置为runtime因为在实际运行环境中,这些jar是包含在classpath中的

optional属性设置为true时当前编译出的jar会包含会包含此依赖但是如果有这个jar被其他包依赖了,拿其他包不会依赖此jar

总结来说provided属性可以方便其他人在使用你的工具类时调整依赖版本,optional属性方便其他人在引入你的工具类时可以只使用一部分功能或者可以选择不同的实现类