君子博学而日参省乎己 则知明而行无过矣

博客园 首页 新随笔 联系 订阅 管理

转载自 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。 

  1. <?xml version="1.0" encoding="UTF-8"?>      
  2.   <project xmlns="http://maven.apache.org/POM/4.0.0"     
  3.           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">      
  4.       
  5.     <modelVersion>4.0.0</modelVersion>      
  6.     <groupId>com.juvenxu.mvnbook</groupId>      
  7.     <artifactId>hello-world</artifactId>      
  8.     <version>1.0-SNAPSHOT</version>      
  9.     <name>Maven Hello World Project</name>      
  10.  </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  

posted on 2013-06-09 02:32  刺猬的温驯  阅读(14338)  评论(0编辑  收藏  举报