maven的学习

来源:互联网 发布:vue.js offsetwidth 编辑:程序博客网 时间:2024/05/18 17:26
<div id="topics">
    <div class="post">
        <h1 class="postTitle">
            <a id="cb_post_title_url" class="postTitle2" href="http://www.cnblogs.com/yjmyzz/p/3495762.html">maven学习(上)- 基本入门用法</a>
        </h1>
        <div class="clear"></div>
        <div class="postBody">
            <div id="cnblogs_post_body"><p><span style="color: #ff0000;"><strong>一、下载及安装</strong></span></p>
<p><span style="color: #ff0000;">1.1 </span>下载maven 3.1.1</p>
<p>先到官网<a href="http://maven.apache.org/download.cgi">http://maven.apache.org/download.cgi</a>&nbsp;下载最新版本(目前是<a href="http://mirrors.cnnic.cn/apache/maven/maven-3/3.1.1/binaries/apache-maven-3.1.1-bin.zip" target="_blank">3.1.1</a>&nbsp;),下载完成后,解压到某个目录(本文中是C:\Java\maven-3.1.1)</p>
<p>&nbsp;</p>
<p><span style="color: #ff0000;">2.1 </span>配置环境变量</p>
<p>系统环境变量里,添加<span style="color: #ff0000;">MAVEN_HOME(或M2_HOME)</span>,其值为C:\Java\maven-3.1.1,然后PATH环境变量最后附加上"<span style="color: #ff0000;">;%MAVEN_HOME%\bin</span>"</p>
<p>检测方法:</p>
<p>a) 重新进入命令行(DOS窗口)模式,输入 echo %MAVEN_HOME% 如果能显示 C:\Java\maven-3.1.1 说明环境变量起作用了</p>
<p>b) 输入 mvn -version,正常情况下会显示maven及jdk的版本号</p>
<p>(前提:jdk环境必须先安装好,否则后面无法正常编译项目)</p>
<p>&nbsp;</p>
<p><span style="color: #ff0000;">3 </span>理解“<span style="color: #ff0000;">仓库</span>”</p>
<p>首次运行完mvn -version后,会在用户目录下创建一个.m2的目录(比如:C:\Users\当前用户名\.m2\),这个目录是maven的“本地仓库”,仓库是maven中一个很重要的概念。</p>
<p>试想一下,我们会在工作中同时创建很多项目,每个项目可能都会引用一些公用的jar包(.NET中是dll文件),一种作法是每个项目里,都复制一份这些依赖的jar包(或dll文件),这样显然不好,相同的文件在硬盘上保存了多份,太占用空间,而且这些依赖的jar包(或dll文件)的版本也不太好管理(比如某个公用的jar包,从1.0升级到2.0,如果所有引用这个jar包的项目都需要更新,必须一个个项目的修改)。</p>
<p>maven的仓库则很好的解决了这些问题,它在每台机器上创建一个本机仓库,把本机上所有maven项目依赖的jar包统一管理起来,而且这些jar包用“<span style="color: #ff0000;">坐标</span>”来唯一标识(注:坐标是另一个重要的概念,后面还会讲到,这里只要简单理解成“<span style="color: #ff0000;">唯一识别</span>某个jar包<span style="color: #ff0000;">文件名、版本号</span>”的标识即可),这样所有maven项目就不需要再象以前那样把jar包复制到lib目录中,整个maven项目看起来十分清爽。</p>
<p>&nbsp;</p>
<p><span style="color: #ff0000;">4 </span>配置代理服务器<span style="color: #ff0000;">(可选)</span></p>
<p>maven项目在编译、测试、打包里,会需要从maven的中央仓库(即:maven组织公布在互联网上的一个站点,里面已经收录了目前绝大多数主流的jar包)下载jar包等文件,如果使用代理服务器上网,需要配置代理服务器。</p>
<p>把%MAVEN_HOME%\conf\settings.xml复制一份到本地仓库C:\Users\当前用户名\.m2\下,然后编辑该文件,找到下面这段</p>
<div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div>
<pre>  <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">proxies</span><span style="color: #0000ff;">&gt;</span>
    <span style="color: #008000;">&lt;!--</span><span style="color: #008000;"> proxy
     | Specification for one proxy, to be used in connecting to the network.
     |
    &lt;proxy&gt;
      &lt;id&gt;optional&lt;/id&gt;
      &lt;active&gt;true&lt;/active&gt;
      &lt;protocol&gt;http&lt;/protocol&gt;
      &lt;username&gt;proxyuser&lt;/username&gt;
      &lt;password&gt;proxypass&lt;/password&gt;
      &lt;host&gt;proxy.host.net&lt;/host&gt;
      &lt;port&gt;80&lt;/port&gt;
      &lt;nonProxyHosts&gt;local.net|some.host.com&lt;/nonProxyHosts&gt;
    &lt;/proxy&gt;
    </span><span style="color: #008000;">--&gt;</span>
  <span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">proxies</span><span style="color: #0000ff;">&gt;</span></pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></div>
<p>把注释去掉,host这里填写代理服务器的地址(可以用IP)以及port端口,如果需要用户名/密码认证,则填写username/password节点,否则username/password这二个节点去掉,nonProxyHosts表示某些地址不需要经过代理服务器,多个地址之间用|分隔,支持通配符,比如172.156.*&nbsp;</p>
<p>&nbsp;</p>
<p><span style="color: #ff0000;"><strong>二、创建项目“骨架”</strong></span></p>
<p>下面用命名行创建一个最基本的maven项目</p>
<p><span style="color: #ff0000;">2.1 </span>mvn archetype:generate</p>
<p>先创建项目的根目录,比如c:\test,命令行窗口下输入</p>
<p>cd /d c:\test</p>
<p><span style="color: #ff0000;">mvn archetype:generate</span></p>
<p>首次运行时,mvn会从远程"中央仓库"下载一些必需的文件到"本地仓库" - (如果你有兴趣,可以在等待下载过程中,观察一下"C:\Users\当前用户名\.m2\repository"到底下载了些啥东东)</p>
<p>下载完成后(下一篇会讲解如何,在局域网环境中搭建“私服”,直接从局域网的代理仓库中下载这些依赖项),会自动进入交互模式,会让你输入一些基本信息,类似下面这样:</p>
<p><span style="color: #808080;"><em>...</em></span></p>
<p><span style="color: #808080;"><em>[INFO] Generating project in Interactive mode <span style="color: #339966;">(这里会卡一会儿,因为要联网获取项目模板)</span></em></span><br><span style="color: #808080;"><em>[INFO] No archetype defined. Using maven-archetype-quickstart (org.apache.maven.archetypes:maven-archetype-quickstart:1.0)</em></span><br><span style="color: #808080;"><em>Choose archetype:</em></span><br><span style="color: #808080;"><em>1: remote -&gt; br.com.ingenieux:elasticbeanstalk-service-webapp-archetype (A Maven Archetype Encompassing RestAssured, Jetty, Jackson, Guice and Jersey for Publishing JAX-RS-based Services on AWS' Elastic Beanstalk Service)</em></span><br><span style="color: #808080;"><em>... <span style="color: #339966;">(这里会自动列出很多项目模板,每种模板前面会有一个数字序号)</span></em></span></p>
<p><span style="color: #808080;"><em>336: remote -&gt; org.apache.maven.archetypes:maven-archetype-quickstart (An archetype which contains a sample Maven project.)</em></span></p>
<p><span style="color: #808080;"><em>...</em></span></p>
<p><span style="color: #808080;"><em>Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 336: <span style="color: #339966;">(这里根据每个人机器上安装的eclipse插件不同,可能默认的数字不是这个,先不管,直接回车)</span></em></span></p>
<p><span style="color: #808080;"><em>Choose org.apache.maven.archetypes:maven-archetype-quickstart version: </em></span><br><span style="color: #808080;"><em>1: 1.0-alpha-1</em></span><br><span style="color: #808080;"><em>2: 1.0-alpha-2</em></span><br><span style="color: #808080;"><em>3: 1.0-alpha-3</em></span><br><span style="color: #808080;"><em>4: 1.0-alpha-4</em></span><br><span style="color: #808080;"><em>5: 1.0</em></span><br><span style="color: #808080;"><em>6: 1.1</em></span><br><span style="color: #808080;"><em>Choose a number: 6: <span style="color: #008000;">(直接回车)</span></em></span><br><span style="color: #808080;"><em>Define value for property 'groupId': : cnblogs <span style="color: #008000;">(可暂时先理解成类似package或namespace的名称,通常我们填写组织机构名称缩写)</span></em></span><br><span style="color: #808080;"><em>Define value for property 'artifactId': : maven-hello-world <span style="color: #008000;">(组件名称,可暂时理解成项目名称)</span></em></span><br><span style="color: #808080;"><em>Define value for property 'version':&nbsp; 1.0-SNAPSHOT: : <span style="color: #008000;">(版本号,直接回车,默认1.0-SNAPSHOT)</span></em></span><br><span style="color: #808080;"><em>Define value for property 'package':&nbsp; cnblogs: : <span style="color: #008000;">(打包后的jar文件名,相当于.net中项目最后生成的程序集dll名称)</span></em></span><br><span style="color: #808080;"><em>Confirm properties configuration:</em></span><br><span style="color: #808080;"><em>groupId: cnblogs</em></span><br><span style="color: #808080;"><em>artifactId: maven-hello-world</em></span><br><span style="color: #808080;"><em>version: 1.0-SNAPSHOT</em></span><br><span style="color: #808080;"><em>package: cnblogs</em></span><br><span style="color: #808080;"><em>&nbsp;Y: :&nbsp; <span style="color: #008000;">(直接回车确认)</span></em></span><br><span style="color: #808080;"><em>[INFO] ----------------------------------------------------------------------------</em></span><br><span style="color: #808080;"><em>[INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-quickstart:1.1</em></span><br><span style="color: #808080;"><em>[INFO] ----------------------------------------------------------------------------</em></span><br><span style="color: #808080;"><em>[INFO] Parameter: groupId, Value: cnblogs</em></span><br><span style="color: #808080;"><em>[INFO] Parameter: packageName, Value: cnblogs</em></span><br><span style="color: #808080;"><em>[INFO] Parameter: package, Value: cnblogs</em></span><br><span style="color: #808080;"><em>[INFO] Parameter: artifactId, Value: maven-hello-world</em></span><br><span style="color: #808080;"><em>...</em></span><br><span style="color: #808080;"><em>[INFO] ------------------------------------------------------------------------</em></span><br><span style="color: #808080;"><em>[INFO] BUILD SUCCESS <span style="color: #008000;">(看到这个,表示项目创建成功!)</span></em></span><br><span style="color: #808080;"><em>[INFO] ------------------------------------------------------------------------</em></span><br><span style="color: #808080;"><em>...</em></span></p>
<p>&nbsp;</p>
<p><span style="color: #ff0000;">2.2 </span>maven项目的目录结构</p>
<p>C:\test\maven-hello-world&gt;tree<br>Folder PATH listing for volume win7<br>Volume serial number is AA2C-6E70<br>C:.<br>├───<span style="color: #ff0000;">src</span><br>│&nbsp;&nbsp; ├───<span style="color: #ff0000;">main</span><br>│&nbsp;&nbsp; │&nbsp;&nbsp; └───<span style="color: #ff0000;">java</span><br>│&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; └───cnblogs<br>│&nbsp;&nbsp; └───<span style="color: #ff0000;">test</span><br>│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; └───java<br>│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; └───cnblogs<br>└───<span style="color: #ff0000;">target</span><br>&nbsp;&nbsp;&nbsp; └───classes<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; └───cnblogs</p>
<p>注意上面带红色的目录名,maven项目采用“<span style="color: #ff0000;">约定优于配置</span>”的原则,<span style="color: #ff0000;">src/main/java</span>约定用于存放源代码,<span style="color: #ff0000;">src/main/test</span>用于存放单元测试代码,<span style="color: #ff0000;">src/target</span>用于存放编译、打包后的输出文件。这是全世界maven项目的通用约定,请记住这些固定的目录结构。</p>
<p>&nbsp;</p>
<p><strong><span style="color: #ff0000;">三、编译项目</span></strong></p>
<p>先进入刚才创建项目的根目录</p>
<p>cd /d c:\test\maven-hello-world</p>
<p>然后执行 <span style="color: #ff0000;">mvn clean compile</span></p>
<p>这样就能对项目进行编译了,编译后会自动在target目录中生成class文件,如果编译成功,会输出类似下面的信息</p>
<p><span style="color: #808080;"><em>yangjunmingmatoMacBook-Pro-7:maven-hello-world jimmy$ mvn clean compile</em></span><br><span style="color: #808080;"><em>[INFO] Scanning for projects...</em></span><br><span style="color: #808080;"><em>[INFO]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</em></span><br><span style="color: #808080;"><em>[INFO] ------------------------------------------------------------------------</em></span><br><span style="color: #808080;"><em>[INFO] Building maven-hello-world 1.0-SNAPSHOT</em></span><br><span style="color: #808080;"><em>[INFO] ------------------------------------------------------------------------</em></span><br><span style="color: #808080;"><em>[INFO] </em></span><br><span style="color: #808080;"><em>[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ maven-hello-world ---</em></span><br><span style="color: #808080;"><em>[INFO] </em></span><br><span style="color: #808080;"><em>[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ maven-hello-world ---</em></span><br><span style="color: #808080;"><em>[INFO] Using 'UTF-8' encoding to copy filtered resources.</em></span><br><span style="color: #808080;"><em>[INFO] skip non existing resourceDirectory /Users/jimmy/Desktop/study/maven-hello-world/src/main/resources</em></span><br><span style="color: #808080;"><em>[INFO] </em></span><br><span style="color: #808080;"><em>[INFO] --- maven-compiler-plugin:2.5.1:compile (default-compile) @ maven-hello-world ---</em></span><br><span style="color: #808080;"><em>[INFO] Compiling 1 source file to /Users/jimmy/Desktop/study/maven-hello-world/target/classes</em></span><br><span style="color: #808080;"><em>[INFO] ------------------------------------------------------------------------</em></span><br><span style="color: #808080;"><em>[INFO] <span style="color: #ff0000;">BUILD SUCCESS</span></em></span><br><span style="color: #808080;"><em>[INFO] ------------------------------------------------------------------------</em></span><br><span style="color: #808080;"><em>[INFO] Total time: 1.515s</em></span><br><span style="color: #808080;"><em>[INFO] Finished at: Wed Jan 01 19:08:32 CST 2014</em></span><br><span style="color: #808080;"><em>[INFO] Final Memory: 10M/156M</em></span><br><span style="color: #808080;"><em>[INFO] ------------------------------------------------------------------------</em></span></p>
<p>&nbsp;</p>
<p><strong><span style="color: #ff0000;">四、单元测试</span></strong></p>
<p><span style="color: #ff0000;">mvn clean test</span></p>
<p>这样就能做单元测试了,so easy !</p>
<p>如果单元测试不通过,会提示出错信息,注意看输出。</p>
<p>注:从输出上可以发现,test前,会先执行compile,即先编译,再执行单元测试.</p>
<p>有兴趣的朋友,可以修改下/src/test/java/cnblogs/AppTest.java里的内容,把testApp()方法中的assertTrue( <span style="color: #ff0000;">true</span> );改成assertTrue( <span style="color: #ff0000;">false</span> );再跑下单元测试,看下有什么不同</p>
<p>&nbsp;</p>
<p><span style="color: #ff0000;"><strong>五、项目打包</strong></span></p>
<p>通常我们会把java项目打包成jar包或war包,maven中打包的命令为</p>
<p><span style="color: #ff0000;">mvn clean package</span></p>
<p>运行完后,会在target目录下生成jar包</p>
<p>注:从输出 可以发现,package前,会先执行compile,再执行test,最后才是package打包</p>
<p>&nbsp;</p>
<p><strong><span style="color: #ff0000;">六、项目运行</span></strong></p>
<p>该项目中的App.java中有main方法,可以直接运行,常规方式下,我们如果想直接运行class文件,得敲一段很长的命令,maven中不必这么复杂,先用记事本打开项目根目录下的pom.xml文件,增加下面这节内容:</p>
<div class="cnblogs_code" onclick="cnblogs_code_show('bb961ff6-e173-45c8-ae30-9b09086ca9e1')"><img id="code_img_closed_bb961ff6-e173-45c8-ae30-9b09086ca9e1" class="code_img_closed" src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt=""><img id="code_img_opened_bb961ff6-e173-45c8-ae30-9b09086ca9e1" class="code_img_opened" style="display: none;" onclick="cnblogs_code_hide('bb961ff6-e173-45c8-ae30-9b09086ca9e1',event)" src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="">
<div id="cnblogs_code_open_bb961ff6-e173-45c8-ae30-9b09086ca9e1" class="cnblogs_code_hide">
<pre><span style="color: #008080;"> 1</span>     <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">build</span><span style="color: #0000ff;">&gt;</span>
<span style="color: #008080;"> 2</span>         <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">finalName</span><span style="color: #0000ff;">&gt;</span>${project.artifactId}<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">finalName</span><span style="color: #0000ff;">&gt;</span>
<span style="color: #008080;"> 3</span>         <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">plugins</span><span style="color: #0000ff;">&gt;</span>
<span style="color: #008080;"> 4</span>             <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">plugin</span><span style="color: #0000ff;">&gt;</span>
<span style="color: #008080;"> 5</span>                 <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">groupId</span><span style="color: #0000ff;">&gt;</span>org.codehaus.mojo<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">groupId</span><span style="color: #0000ff;">&gt;</span>
<span style="color: #008080;"> 6</span>                 <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">artifactId</span><span style="color: #0000ff;">&gt;</span>exec-maven-plugin<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">artifactId</span><span style="color: #0000ff;">&gt;</span>
<span style="color: #008080;"> 7</span>                 <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">version</span><span style="color: #0000ff;">&gt;</span>1.2.1<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">version</span><span style="color: #0000ff;">&gt;</span>
<span style="color: #008080;"> 8</span>                 <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">executions</span><span style="color: #0000ff;">&gt;</span>
<span style="color: #008080;"> 9</span>                     <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">execution</span><span style="color: #0000ff;">&gt;</span>
<span style="color: #008080;">10</span>                         <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">goals</span><span style="color: #0000ff;">&gt;</span>
<span style="color: #008080;">11</span>                             <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">goal</span><span style="color: #0000ff;">&gt;</span>exec<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">goal</span><span style="color: #0000ff;">&gt;</span>
<span style="color: #008080;">12</span>                         <span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">goals</span><span style="color: #0000ff;">&gt;</span>
<span style="color: #008080;">13</span>                     <span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">execution</span><span style="color: #0000ff;">&gt;</span>
<span style="color: #008080;">14</span>                 <span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">executions</span><span style="color: #0000ff;">&gt;</span>
<span style="color: #008080;">15</span>                 <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">configuration</span><span style="color: #0000ff;">&gt;</span>
<span style="color: #008080;">16</span>                     <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">executable</span><span style="color: #0000ff;">&gt;</span>java<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">executable</span><span style="color: #0000ff;">&gt;</span>          
<span style="color: #008080;">17</span>                     <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">arguments</span><span style="color: #0000ff;">&gt;</span>                       
<span style="color: #008080;">18</span>                         <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">argument</span><span style="color: #0000ff;">&gt;</span>-classpath<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">argument</span><span style="color: #0000ff;">&gt;</span>
<span style="color: #008080;">19</span>                         <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">classpath</span><span style="color: #0000ff;">&gt;</span>
<span style="color: #008080;">20</span>                         <span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">classpath</span><span style="color: #0000ff;">&gt;</span>
<span style="color: #008080;">21</span>                         <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">argument</span><span style="color: #0000ff;">&gt;</span>cnblogs.App<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">argument</span><span style="color: #0000ff;">&gt;</span>
<span style="color: #008080;">22</span>                     <span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">arguments</span><span style="color: #0000ff;">&gt;</span>
<span style="color: #008080;">23</span>                 <span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">configuration</span><span style="color: #0000ff;">&gt;</span>
<span style="color: #008080;">24</span>             <span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">plugin</span><span style="color: #0000ff;">&gt;</span>
<span style="color: #008080;">25</span>         <span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">plugins</span><span style="color: #0000ff;">&gt;</span>
<span style="color: #008080;">26</span>     <span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">build</span><span style="color: #0000ff;">&gt;</span></pre>
</div>
<span class="cnblogs_code_collapse">View Code </span></div>
<p>上述这段内容插入在<span style="color: #ff0000;">&lt;/project&gt;</span>之前即可。</p>
<p>然后在命令行下,输入</p>
<p><span style="color: #ff0000;">mvn exec:exec</span></p>
<p>即可直接运行,下面是输出:</p>
<p><span style="color: #808080;"><em>C:\test\maven-hello-world&gt;mvn exec:exec</em></span><br><span style="color: #808080;"><em>[INFO] Scanning for projects...</em></span><br><span style="color: #808080;"><em>[INFO]</em></span><br><span style="color: #808080;"><em>[INFO] ------------------------------------------------------------------------</em></span><br><span style="color: #808080;"><em>[INFO] Building maven-hello-world 1.0-SNAPSHOT</em></span><br><span style="color: #808080;"><em>[INFO] ------------------------------------------------------------------------</em></span><br><span style="color: #808080;"><em>[INFO]</em></span><br><span style="color: #808080;"><em>[INFO] --- exec-maven-plugin:1.2.1:exec (default-cli) @ maven-hello-world ---</em></span><br><em><span style="color: #ff0000;">Hello World!</span></em><br><span style="color: #808080;"><em>[INFO] ------------------------------------------------------------------------</em></span><br><span style="color: #808080;"><em>[INFO] BUILD SUCCESS</em></span><br><span style="color: #808080;"><em>[INFO] ------------------------------------------------------------------------</em></span><br><span style="color: #808080;"><em>[INFO] Total time: 1.175s</em></span><br><span style="color: #808080;"><em>[INFO] Finished at: Mon Jan 13 22:35:02 CST 2014</em></span><br><span style="color: #808080;"><em>[INFO] Final Memory: 6M/111M</em></span><br><span style="color: #808080;"><em>[INFO] ------------------------------------------------------------------------</em></span></p>
<p>&nbsp;</p>
<p><strong><span style="color: #ff0000;">七、项目部署</span></strong></p>
<p><span style="color: #ff0000;">如果是web项目</span>,使用命令</p>
<p><span style="color: #ff0000;">mvn clean jboss-as:deploy</span></p>
<p>就能自动将web项目部署到jboss中(前提是jboss web server已经成功启动),因为刚才我们创建的是一个最基本的maven项目,并非web项目,所以执行这条命令,应该会失败,后面会讲如何在eclipse中用插件部署web项目,这里可以先跳过。</p>
<p>另外:</p>
<p>有时候,我们的项目是一个类库,只是封装一些方法供其它项目引用,对于这种项目,我们可以用 <span style="color: #ff0000;">mvn clean install</span> 把生成的jar包,安装到“本地仓库”中,这样本机其它项目需要使用该jar包时,只要在pom里配置依赖项即可,不用把jar包复制到当前项目中。</p>
<p>&nbsp;</p>
<p><strong><span style="color: #ff0000;">八、eclipse中集成maven</span></strong></p>
<p><span style="color: #ff0000;">8.1</span> 修改eclipse中使用的maven版本</p>
<p>eclipse自带了maven3.0.4,如果想使用最新的3.1.1,可以在eclipse -&gt; window -&gt; perferences -&gt; Maven -&gt; Installations 里参考下图设置一下</p>
<p><img src="http://images.cnitblog.com/blog/27612/201401/01214952-4a1744e8c617485ebed75ef3d4f382cb.jpg" alt=""></p>
<p>&nbsp;</p>
<p><span style="color: #ff0000;">8.2</span> 安装Red Hat JBoss Developer Studio(可选,纯个人喜欢)</p>
<p>eclipse -&gt; help -&gt; Eclipse Marketplace 搜索jboss,找到Red Hat JBoss Developer Studio,安装即可</p>
<p><img src="http://images.cnitblog.com/blog/27612/201401/01215224-c86a10a3f9d44cd4a3eff4381ddf3d88.jpg" alt=""></p>
<p>&nbsp;</p>
<p><span style="color: #ff0000;">8.3</span> 创建一个web的maven示例项目</p>
<p>File -&gt; New -&gt; Maven Project -&gt; Next ,在接下来的窗口中会看到一大堆的项目模板,Filter栏里输入“jboss-javaee6-webapp-archetype”,参考下图</p>
<p><img src="http://images.cnitblog.com/blog/27612/201401/01221409-760f169f04064e2ab63eacd35224a027.png" alt=""></p>
<p>然后Next,在接下来的界面中填写groupId之类</p>
<p><img src="http://images.cnitblog.com/blog/27612/201401/01221642-28281af37e974090aeed829a718c0fe6.png" alt=""></p>
<p>然后Finish完成项目创建。整个过程其实跟前面提到的纯手式命令行完全类似,只不过借助于插件,以图形化的方式更友好而已,直接Finish</p>
<p><img src="http://images.cnitblog.com/blog/27612/201401/141357005025.png" alt=""></p>
<p>项目上右击-&gt;Run As 就能看到很多Maven的选项,顾名思义,如何选择Maven install,等效于命令行执行mvn clean install,其它几项的含义一看便知,一般来讲Maven test 和 Maven install这二个基本上已经够用,如果还想定义自己的命令,比如 maven clean package,可以选择“6 Maven build...”,会弹出一个界面,如下图,在name输入框填写名称:maven-web-sample-package(名字可以随便写,只要方便自己记忆就行),Goals栏输入clean package</p>
<p><img src="http://images.cnitblog.com/blog/27612/201401/141401052989.jpg" alt=""></p>
<p>最后点击Run关闭这个窗口,以后可以直接从工具栏调出这个选择,如下图:</p>
<p><img src="http://images.cnitblog.com/blog/27612/201401/141406444557.png" alt=""></p>
<p>实际使用中,发现eclipse与maven之间并非整合得天衣无缝,有时候eclipse中项目图标经常会莫名其妙的出现一些红叉,以下是一些个人经验:</p>
<p>a) 尝试先到Dos命令行窗口,用mvn clean compile(或install)之类的命令试下能否正常编译</p>
<p>b) 如果a) 步骤能正常编译,在回到eclipse中,项目右击-&gt;Maven-Update Project ,通常这样就能消除红叉</p>
<p>c) 有时候b)步骤操作完以后,仍然会有红色感叹号或红叉,但是eclipse编译、调试都OK,这就要具体问题具体分析了,可以尝试把Problems面板调出来,逐个分析</p>
<p>d) 以上3个步骤都尝试无效后,最后还可以尝试 Windows -&gt; Preferences -&gt; Validation -&gt; Disable All 把所有验证都关掉</p>
<p>&nbsp;</p>
<p><a href="http://www.cnblogs.com/yjmyzz/p/3519373.html" target="_blank">下一篇</a>,将介绍如何搭建"仓库私服"等其它内容</p></div><div id="MySignature" style="display: block;"><div style="padding:5px;background:#ff9;border:solid 1px #ccc">作者:<a href="http://yjmyzz.cnblogs.com">菩提树下的杨过</a><br>
出处:<a href="http://yjmyzz.cnblogs.com">http://yjmyzz.cnblogs.com</a>
<br>
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
</div>
</div>
<div class="clear"></div>
<div id="blog_post_info_block">
<div id="BlogPostCategory">分类: <a href="http://www.cnblogs.com/yjmyzz/category/424772.html" target="_blank">15.Java/Scala</a></div>
<div id="EntryTag">标签: <a href="http://www.cnblogs.com/yjmyzz/tag/eclipse/">eclipse</a>, <a href="http://www.cnblogs.com/yjmyzz/tag/java/">java</a>, <a href="http://www.cnblogs.com/yjmyzz/tag/maven/">maven</a></div>
<div id="blog_post_info"><div id="green_channel">
        <a href="javascript:void(0);" id="green_channel_digg" onclick="DiggIt(3495762,cb_blogId,1);green_channel_success(this,'谢谢推荐!');">好文要顶</a>
            <a id="green_channel_follow" onclick="follow('c1853d0b-63cf-dd11-9e4d-001cf0cd104b');" href="javascript:void(0);">关注我</a>
    <a id="green_channel_favorite" onclick="AddToWz(cb_entryId);return false;" href="javascript:void(0);">收藏该文</a>
    <a id="green_channel_weibo" href="javascript:void(0);" title="分享至新浪微博" onclick="ShareToTsina()"><img src="//common.cnblogs.com/images/icon_weibo_24.png" alt=""></a>
    <a id="green_channel_wechat" href="javascript:void(0);" title="分享至微信" onclick="shareOnWechat()"><img src="//common.cnblogs.com/images/wechat.png" alt=""></a>
</div>
<div id="author_profile">
    <div id="author_profile_info" class="author_profile_info">
            <a href="http://home.cnblogs.com/u/yjmyzz/" target="_blank"><img src="//pic.cnblogs.com/face/u27612.png" class="author_avatar" alt=""></a>
        <div id="author_profile_detail" class="author_profile_info">
            <a href="http://home.cnblogs.com/u/yjmyzz/">菩提树下的杨过</a><br>
            <a href="http://home.cnblogs.com/u/yjmyzz/followees">关注 - 6</a><br>
            <a href="http://home.cnblogs.com/u/yjmyzz/followers">粉丝 - 2841</a>
        </div>
    </div>
    <div class="clear"></div>
    <div id="author_profile_honor">荣誉:<a href="http://www.cnblogs.com/expert/" target="_blank">推荐博客</a></div>
    <div id="author_profile_follow">
                <a href="javascript:void(0);" onclick="follow('c1853d0b-63cf-dd11-9e4d-001cf0cd104b');return false;">+加关注</a>
    </div>
</div>
<div id="div_digg">
    <div class="diggit" onclick="votePost(3495762,'Digg')">
        <span class="diggnum" id="digg_count">20</span>
    </div>
    <div class="buryit" onclick="votePost(3495762,'Bury')">
        <span class="burynum" id="bury_count">0</span>
    </div>
    <div class="clear"></div>
    <div class="diggword" id="digg_tips">
    </div>
</div>
</div>
<div class="clear"></div>
<div id="post_next_prev"><a href="http://www.cnblogs.com/yjmyzz/p/3495689.html" class="p_n_p_prefix">« </a> 上一篇:<a href="http://www.cnblogs.com/yjmyzz/p/3495689.html" title="发布于2013-12-28 20:43">mac下环境变量、maven3.1.1 及 jdk1.7.0.45配置</a><br><a href="http://www.cnblogs.com/yjmyzz/p/3505325.html" class="p_n_p_prefix">» </a> 下一篇:<a href="http://www.cnblogs.com/yjmyzz/p/3505325.html" title="发布于2014-01-04 21:32">IBM WebSphere MQ 7.5基本用法</a><br></div>
</div>


        </div>
        <div class="postDesc">posted @ <span id="post-date">2014-01-01 21:41</span> <a href="http://www.cnblogs.com/yjmyzz/">菩提树下的杨过</a> 阅读(<span id="post_view_count">73047</span>) 评论(<span id="post_comment_count">10</span>)  <a href="https://i.cnblogs.com/EditPosts.aspx?postid=3495762" rel="nofollow">编辑</a> <a href="#" onclick="AddToWz(3495762);return false;">收藏</a></div>
    </div>
    <script type="text/javascript">var allowComments=true,cb_blogId=31164,cb_entryId=3495762,cb_blogApp=currentBlogApp,cb_blogUserGuid='c1853d0b-63cf-dd11-9e4d-001cf0cd104b',cb_entryCreatedDate='2014/1/1 21:41:00';loadViewCount(cb_entryId);</script>
    
</div>