转载自 http://blog.csdn.net/ljfbest/article/details/8045988
安装好maven后,想要使用他的一些命令,需要配置环境变量PATH:D:\study\apache-maven-3.0.4\bin
运行mvn命令实际上是执行了Java命令,既然是运行Java,那么运行Java命令可用的参数当然也应该在运行mvn命令时可用。这个时候,MAVEN_OPTS环境变量就 能派上用场。 设置MAVEN_OPTS的值为:-Xms128m -Xmx512m,因为Java默认的最大可用内存往往不能够满足Maven运行的需要,比如在项目较大时,使用Maven生成项目站点需要占用大量的内 存,如果没有该配置,我们很容易得到java.lang.OutOfMemeoryError。
settings.xml :Maven用户可 以选择配置$M2_HOME/conf/settings.xml或者~/.m2/settings.xml。前者是全局范围的,整台机器上的所有用户都 会直接受到该配置的影响,而后者是用户范围的,只有当前用户才会受到该配置的影响。 推荐使用用户范围的settings.xml,主要原因是为了避免无 意识地影响到系统中的其他用户。如果有切实的需求,需要统一系统中所有用户的settings.xml配置,当然应该使用全局范围的 settings.xml。
修改中央仓库位置:修改settings.xml 中 <localRepository>D:/java/repos</localRepository> 即以后下载的东西就在D:/java/repos 拷贝到任一位置当做用户settings.xml
中央仓库无法访问解决办法,搜了好长时间原来是联通网的原因,无语……
第一种:http://blog.csdn.net/shycx/article/details/7726600
运行如下命令尝试快速构建一个maven项目:
mvn archetype:generate
结果就有问题:
[INFO] Scanning for projects...
Downloading: http://repo1.maven.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.4.1/maven-clean-plugin-2.4.1.pom
[WARNING] Failed to retrieve plugin descriptor for
org.apache.maven.plugins:maven-clean-plugin:2.4.1: Plugin
org.apache.maven.plugins:maven-clean-plugin:2.4.1 or one of its
dependencies could not be resolved: Failed to read artifact descriptor
for org.apache.maven.plugins:maven-clean-plugin:jar:2.4.1
Downloading: http://repo1.maven.org/maven2/org/apache/maven/plugins/maven-install-plugin/2.3.1/maven-install-plugin-2.3.1.pom
[WARNING] Failed to retrieve plugin descriptor for
org.apache.maven.plugins:maven-install-plugin:2.3.1: Plugin
org.apache.maven.plugins:maven-install-plugin:2.3.1 or one of its
dependencies could not be resolved: Failed to read artifact descriptor
for org.apache.maven.plugins:maven-install-plugin:jar:2.3.1
Downloading: http://repo1.maven.org/maven2/org/apache/maven/plugins/maven-deploy-plugin/2.5/maven-deploy-plugin-2.5.pom
[WARNING] Failed to retrieve plugin descriptor for
org.apache.maven.plugins:maven-deploy-plugin:2.5: Plugin
org.apache.maven.plugins:maven-deploy-plugin:2.5 or one of its
dependencies could not be resolved: Failed to read artifact descriptor
for org.apache.maven.plugins:maven-deploy-plugin:jar:2.5
Downloading: http://repo1.maven.org/maven2/org/apache/maven/plugins/maven-site-plugin/2.0.1/maven-site-plugin-2.0.1.pom
------
这种hello
world级别的操作出错,就怀疑是网络问题,于是让其他同事帮我尝试访问http://repo1.maven.org/maven2/org
/apache/maven/plugins/maven-clean-plugin/2.4.1/maven-clean-plugin-
2.4.1.pom地址,发现完全没问题,感觉异常郁闷。后来网上查了一下,发现是因为联通网络下,无法访问maven.org网站。解决此问题理论上有
两个办法,一个是在maven的配置文件中设置代理,另一个是在maven的配置文件中设置联通网络下,能够访问的中央仓库的mirrors。因为也不好
找稳定的代理,我就在网上搜索了两个可用的mirror站点,配置方式如下:
1、打开maven配置文件(maven安装目录下的conf目录下的settings.xml文件)
2、搜索mirrors关键字,如果注释说明的下方没有 <mirrors>节点,则建立mirrors节点,带mirrors节点的所有配置如下(复制下面的内容,粘贴到配置文件中即可):
<mirrors>
<!-- mirror
| Specifies a repository mirror site to use instead of a given repository. The repository that
| this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
| for inheritance and direct lookup purposes, and must be unique across the set of mirrors.
|
<mirror>
<id>mirrorId</id>
<mirrorOf>repositoryId</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://my.repository.com/repo/path</url>
</mirror>
-->
<mirror>
<id>ibiblio.org</id>
<name>ibiblio Mirror of http://repo1.maven.org/maven2/</name>
<url>http://mirrors.ibiblio.org/pub/mirrors/maven2</url>
<mirrorOf>central</mirrorOf>
<!-- United States, North Carolina -->
</mirror>
<mirror>
<id>jboss-public-repository-group</id>
<mirrorOf>central</mirrorOf>
<name>JBoss Public Repository Group</name>
<url>http://repository.jboss.org/nexus/content/groups/public</url>
</mirror>
</mirrors>
第二种:http://www.oschina.net/question/96320_60348
修改host文件夹完美解决 :加入
72.21.81.253 repo1.maven.org
第三种:设置HTTP代理
有时候你所在的公司由于安全因素考虑,要求你使用通过安全认证的代理访问因特网或无法访问。这种情况下,就需要为Maven配置HTTP代理,才能让它正
常访问外部仓库,以下载所需要的资源。 首先确认自己无法直接访问公共的Maven中央仓库,直接运行命令ping
repo1.maven.org可以检查网络。如果真的需要代理,先检查一下代理服务器是否畅通,比如现在有一个IP
地址为218.14.227.197,端口为3128的代理服务,我们可以运行telnet 218.14.227.197
3128来检测该地址的该端口是否畅通。如果得到出错信息,需要先获取正确的代理服务信息;如果telnet
连接正确,则输入ctrl+],然后q,回车,退出即可。 检查完毕之后,编辑~/.m2/settings.xml文件(如果没有该文件,则复
制$M2_HOME/conf/settings.xml)。添加代理配置如下:
<settings>
-----------
<proxies>
<proxy>
<id>my-proxy</id>
<active>true</active>
<protocol>http</protocol>
<host>218.14.227.197</host>
<port>3128</port>
<!--
<username>***</username>
<password>***</password>
<nonProxyHosts>repository.mycom.com|*.google.com</nonProxyHosts>
-->
</proxy>
</proxies>
-----------------
</settings>
这段配置十分简单,proxies下可以有多个proxy元素,如果你声明了多个proxy元素,则默认情况下第一个被激活的proxy会生效。这里声明
了一个id为my-proxy的代理,active的值为true
表示激活该代理,protocol表示使用的代理协议,这里是http。当然,最重要的是指定正确的主机名(host 元素)和端口(port
元素)。上述XML配置中我注释掉了username、password、nonProxyHost几个元素,当你的代理服务需要认证时,就需要配置
username和password。nonProxyHost元素用来指定哪些主机名不需要代理,可以使用
| 符号来分隔多个主机名。此外,该配置也支持通配符,如*.google.com表示所有以google.com结尾的域名访问都不要通过代理
pom.xml:
就像Make的Makefile,Ant的build.xml一样,Maven项目的核心是pom.xml。POM(Project Object
Model,项目对象模型)定义了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。现在我们先为Hello
World项目编写一个最简单的pom.xml。
- <?xml version="1.0" encoding="UTF-8"?>
- <project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <groupId>com.juvenxu.mvnbook</groupId>
- <artifactId>hello-world</artifactId>
- <version>1.0-SNAPSHOT</version>
- <name>Maven Hello World Project</name>
- </project>
代码的第一行是XML头,指定了该xml文档的版本和编码方式。紧接着是project元素,project是所有pom.xml的根元素,根元素
下的第一个子元素modelVersion指定了当前POM模型的版本,对于Maven2及Maven3来说,它只能是4.0.0。 这段代码中最重要的
是groupId,artifactId和version三行。这三个元素定义了一个项目基本的坐标,在Maven的世界,任何的jar、pom或者
war都是以基于这些基本的坐标进行区分的。 groupId定义了项目属于哪个组,这个组往往和项目所在的组织或公
司存在关联,譬如你在googlecode上建立了一个名为myapp的项目,那么groupId就应该是com.googlecode.myapp,如
果你的公司是mycom,有一个项目为myapp,那么groupId就应该是com.mycom.myapp。本书中所有的代码都基于groupId
com.juvenxu.mvnbook。 artifactId定义了当前Maven项目在组中唯一的ID,我们
为这个Hello
World项目定义artifactId为hello-world,而在前面的groupId为com.googlecode.myapp的例子中,你可
能会为不同的子项目(模块)分配artifactId,如:myapp-util、myapp-domain、myapp-web等等。version指
定了Hello
World项目当前的版本——1.0-SNAPSHOT。SNAPSHOT意为快照,说明该项目还处于开发中,是不稳定的版本。随着项目的发
展,version
会不断更新,如升级为1.0、1.1-SNAPSHOT、
1.1、2.0等等。
maven项目骨架archetype:
项目中有一些Maven的约定:在项目的根目录中放置pom.xml,在src/main/java目录中放置项目的主代码,src/main/java/resources存放源代码资源文件,在src/test/java中放置项目的测试代码
简单的运行: mvn archetype:generate 就可以构造出这个骨架 Maven会提示我们输入要创建项目的groupId、artifactId、 version、以及包名package
常用命令:编译源代码: mvn compile 编译测试代码:mvn test-compile 运行测试:mvn test 产生site:mvn site 打包:mvn package 在本地Repository中安装jar:mvn install 清除产生的项目:mvn clean