设置MAVEN_OPTS环境变量
- 执行mvn命令会调用bin下面的脚本,而这些脚本实际是操作java命令。既然是运行java命令,那么运行java命令可用的参数当然也能够在运行mvn命令时使用,比如-D就是java参数,当然还有-Xms 等。
- 如果想在执行mvn时为java命令设置参数就可以把参数设置的MAVEN_OPTS环境变量中,通常需要设置MAVEN_OPTS的值为-Xms128m -Xmx521m,因为java默认的最大可用内存往往不能够满足Maven运行的需求,比如在项目较大时,使用maven生成项目站点需要占用大量内存,没有该配置,容易得到java.lang.OutOfMemeoryError,所以推荐为MAVEN_OPTS配置该值。
目录分析
在安装好maven后,进入maven解压目录,我的maven目录如下:
maven目录文件分析
-
bin: 该目录存放了mvn运行脚本。 在命令行中输入任何一条mvn命令时,实际上就是调用这些脚本。
bin目录下文件
-
boot: 该目录只存放一个文件plexus-classworlds-2.5.2.jar
boot目录中的文件- plexus-classworlds是一个类加载器框架,相对于默认的java类加载器,它提供了更丰富的语法以方便配置,Maven使用该框架加载自己的类库。classworlds更多信息
-
conf:目录包喊了maven的配置文件
conf目录中的文件- settings.xml:很重要配置文件,直接修改该文件就能在机器上全局的定制Maven行为,一般更偏向于将文件复制到/.m2/目录下(表示用户目录),然后修改该文件,在用户范围定制Maven的行为。
-
lib:该目录包含了所有Maven运行时需要的Java类库,plexus-classworlds类加载器会从该文件夹下加载类到内存中。Maven本身是分模块开发的,因此用户能看到诸如maven-core-3.3.3.jar、maven-model-3.3.3.jar等。
lib目录中文件一部分- 其中超级POM文件在包maven-model-builder-3.3.3.jar中的org/apache/maven/model/pom-4.0.0.xml路径下。对于maven2超级POM在lib/maven-x.x.x-uber.jar中的org/apache/maven/project/pom-4.0.0.xml目录下。
- LICENSE记录了Maven使用软件许可证Apache License Version2.0
- NOTICE记录了Maven包含的第三方软件
- READAME.txt则包含了Maven的简介,包括安装需求、如何安装的简要指令等。
配置本地仓库
默认位置
- 在使用maven开发过程中下载的依赖包都会存放的本地maven仓库中,maven的默认仓库位置为:${user.home}/.m2/repository。一般user.home为C盘下的用户文件夹。
在setting.xml文件的默认配置如下:
<!-- localRepository
| The path to the local repository maven will use to store artifacts.
|
| Default: ${user.home}/.m2/repository
-->
需求位置
- 改变仓库位置,由于仓库内容会变多,我们一般不会设置在C盘,我想设置D:\Soft\maven\maven_jar\repository为maven仓库。
操作
- 方案1(推荐):新建D:\Soft\maven\maven_jar\repository目录,然后修改${user.home}/.m2/repository目录下的setting.xml文件,没有的话从maven的/config/setting.xml目录下拷贝过去。我的用户名为liang,则本地仓库地址为C:\Users\liang.m2\repository\,而Linux上的本地仓库地址为home/liang/.m2/repository/注意Liunx中以点(.)开头的文件或目录默认隐藏的,可以使用ls-a命令查看。
修改setting.xml如下:
<!-- localRepository
| The path to the local repository maven will use to store artifacts.
|
| Default: ${user.home}/.m2/repository
-->
<localRepository>D:\Soft\maven\maven_jar\repository</localRepository>
- 方案2(针对eclipse设置maven配置文件):新建D:\Soft\maven\maven_jar\repository目录,将setting.xml文件拷贝一份到目录下。然后修改该目录下的setting.xml文件,修改如下:
<!-- localRepository
| The path to the local repository maven will use to store artifacts.
|
| Default: ${user.home}/.m2/repository
-->
<localRepository>D:\Soft\maven\maven_jar\repository</localRepository>
此时执行mvn命令如果有依赖要下载还会下载到${user.home}/.m2/repository目录下,因为执行的命令时参考的setting.xml文件依然是原来的setting.xml文件而不是D:\Soft\maven\maven_jar\repository下的。
这个操作可以在eclipse中使用maven时,将setting.xml配置文件替换成D:\Soft\maven\maven_jar\repository下载setting.xml。
- 方案3:新建D:\Soft\maven\maven_jar\repository目录,然后修改maven/config目录下的setting.xml文件,修改如下:
<!-- localRepository
| The path to the local repository maven will use to store artifacts.
|
| Default: ${user.home}/.m2/repository
-->
<localRepository>D:\Soft\maven\maven_jar\repository</localRepository>
设置HTTP代理
需求
- 公司出于安全考虑,要求使用通过安全认证的代理访问因特网,这时就需要maven配置http代理,才能正常访问外部仓库。
操作
-
首先确认自己无法直接访问公共的maven中央仓库,运行ping repol.maven.org可以检查网络,在检查代理服务器是否畅通,比如现在有一个IP地址为218.14.227.197端口为3128的代理服务器,我们可以运行telnet 218.14.227.197 3128来检测改地址的该端口是否通畅。出错则获取正确的代理信息,如果telnet连接正确,则输入ctrl+],然后q,回车,退出即可。
-
设置setting.xml文件,如果不想设置全局的,可以将setting.xml复制到~/.m2/settings.xml。
添加代理如下:
<!-- proxies
| This is a list of proxies which can be used on this machine to connect to the network.
| Unless otherwise specified (by system property or command-line switch), the first proxy
| specification in this list marked as active will be used.
|-->
<proxies>
<!-- proxy
| Specification for one proxy, to be used in connecting to the network.
-->
<proxy>
<id>my-proxy</id>
<active>true</active>
<protocol>http</protocol>
<host>218.14.227.197</host>
<port>3128</port>
<!--
<username>proxyuser</username>
<password>proxypass</password>
<nonProxyHosts>local.net|some.host.com|*.google.com</nonProxyHosts>
-->
</proxy>
<!--<proxy>
<id>optional</id>
<active>true</active>
<protocol>http</protocol>
<username>proxyuser</username>
<password>proxypass</password>
<host>proxy.host.net</host>
<port>80</port>
<nonProxyHosts>local.net|some.host.com</nonProxyHosts>
</proxy>
-->
</proxies>
- 解释
声明一个id为my-proxy的代理,active为true表示激活该代理,protocol代表使用的代理协议,这里是http。host主机名(可填ip或域名),port端口。当代理需要服务器需要认证时就要配置username和password。nonProxyHost元素用来指定哪些主机名不需要dialing,可以用"|"符号分隔多个主机名。此外支持通配符,如*.google.com表示所有以google.com结尾的域名访问都不要通过代理。
网友评论