天天看点

利用m2e插件搭建Java Web工程,管理依赖

    最近正好在学习Maven的项目管理,整理自己的开发的项目的依赖关系,又恰好需要新建一个web工程。正好一遍学习,一遍记录下来,与大家分享,同时有问题的地方也欢迎大家指出、讨论。

    环境依赖:

    Eclipse+Maven Eclipse Plugin

1.         首先当然是新建一个web工程了。

2.         选择工程->右键菜单->configure->convert to Maven project

<a target="_blank" href="http://blog.51cto.com/attachment/201111/225055184.png"></a>

         转换好后,工程上会带一个M的标志。

3.         配置依赖关系pom.xml

这里一般都采用一个parent工程统一管理依赖jar包的版本,以免出现jar冲突的情况。

<a target="_blank" href="http://blog.51cto.com/attachment/201111/225122383.png"></a>

 这里我用nocloud-parent工程,统一管理jar。其pom.xml文件如下:

    &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt; 

    &lt;groupId&gt;lhz.home.nocloud&lt;/groupId&gt; 

    &lt;artifactId&gt;nocloud-parent&lt;/artifactId&gt; 

    &lt;version&gt;0.0.1-SNAPSHOT&lt;/version&gt; 

    &lt;packaging&gt;pom&lt;/packaging&gt; 

     &lt;properties&gt; 

       &lt;activemq.version&gt;5.5.0&lt;/activemq.version&gt; 

       &lt;cglib.version&gt;2.2.2&lt;/cglib.version&gt; 

  &lt;springframework.version&gt;3.0.6.RELEASE&lt;/springframework.version&gt; 

&lt;springframework-roo.version&gt;1.0.2.RELEASE&lt;/springframework-roo.version&gt; 

     ………… 

  &lt;/properties&gt; 

   &lt;dependencyManagement&gt; 

       &lt;dependencies&gt; 

           &lt;dependency&gt; 

              &lt;groupId&gt;org.restlet.jse&lt;/groupId&gt; 

              &lt;artifactId&gt;org.restlet&lt;/artifactId&gt; 

              &lt;version&gt;${restlet.version}&lt;/version&gt; 

           &lt;/dependency&gt; 

              &lt;groupId&gt;org.springframework&lt;/groupId&gt; 

              &lt;artifactId&gt;spring-core&lt;/artifactId&gt; 

              &lt;version&gt;${springframework.version}&lt;/version&gt; 

           ………… 

           &lt;/dependencies&gt; 

    &lt;/dependencyManagement&gt; 

    &lt;repositories&gt; 

       &lt;repository&gt; 

           &lt;id&gt;maven-restlet&lt;/id&gt; 

           &lt;name&gt;Public online Restlet repository&lt;/name&gt; 

           &lt;url&gt;http://maven.restlet.org&lt;/url&gt; 

       &lt;/repository&gt; 

    &lt;/repositories&gt; 

&lt;/project&gt; 

对于dependencyManagement的意义,本博转帖的另一篇文章中有解释。这里变量${springframework.version}引用的值即为前面properties里定义的值。

nocloud-web的pom.xml文件:

  &lt;artifactId&gt;nocloud-web&lt;/artifactId&gt; 

    &lt;parent&gt; 

       &lt;groupId&gt;lhz.home.nocloud&lt;/groupId&gt; 

       &lt;artifactId&gt;nocloud-parent&lt;/artifactId&gt; 

       &lt;version&gt;0.0.1-SNAPSHOT&lt;/version&gt; 

    &lt;/parent&gt; 

    &lt;dependencies&gt; 

     &lt;dependency&gt; 

          &lt;groupId&gt;org.springframework&lt;/groupId&gt; 

           &lt;artifactId&gt;spring-context&lt;/artifactId&gt; 

       &lt;/dependency&gt; 

       &lt;dependency&gt; 

           &lt;groupId&gt;org.springframework&lt;/groupId&gt; 

           &lt;artifactId&gt;spring-tx&lt;/artifactId&gt; 

………………

    &lt;/dependencies&gt; 

    &lt;build&gt; 

    &lt;plugins&gt; 

      &lt;plugin&gt; 

         &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt; 

         &lt;artifactId&gt;maven-dependency-plugin&lt;/artifactId&gt; 

         &lt;version&gt;2.1&lt;/version&gt; 

         &lt;executions&gt; 

              &lt;execution&gt; 

               &lt;id&gt;copy-dependencies&lt;/id&gt; 

               &lt;phase&gt;package&lt;/phase&gt; 

               &lt;goals&gt; 

                &lt;goal&gt;copy-dependencies&lt;/goal&gt; 

               &lt;/goals&gt;           

               &lt;configuration&gt; 

                &lt;outputDirectory&gt;${basedir}/WebContent/WEB-INF/lib&lt;/outputDirectory&gt; 

               &lt;/configuration&gt; 

              &lt;/execution&gt; 

             &lt;/executions&gt; 

        &lt;/plugin&gt; 

   &lt;/plugins&gt; 

   &lt;/build&gt; 

这里着重说明下&lt;build&gt;的部分。利用maven-dependency-plugin这个插件,可以自动讲依赖的jar拷贝到指定的目录下(这里是WEB-INF/lib下)。${basedir}是一个变量,指当前工程根路径。这段代码在Eclipse中会提示错误。

maven-dependency-plugin (goals "copy-dependencies", "unpack") is not supported by m2e.

不过并不影响使用,可以通过命令行的方式。

进入pom文件所在目录。执行mvn package即可将依赖的jar拷贝到指定的目录下。

或者加入以下内容:

&lt;plugin&gt; 

&lt;groupId&gt;org.eclipse.m2e&lt;/groupId&gt; 

&lt;artifactId&gt;lifecycle-mapping&lt;/artifactId&gt; 

&lt;version&gt;1.0.0&lt;/version&gt; 

&lt;configuration&gt; 

&lt;lifecycleMappingMetadata&gt; 

&lt;pluginExecutions&gt; 

&lt;pluginExecution&gt; 

&lt;pluginExecutionFilter&gt; 

&lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt; 

&lt;artifactId&gt;maven-dependency-plugin&lt;/artifactId&gt; 

&lt;goals&gt; 

&lt;goal&gt;copy-dependencies&lt;/goal&gt; 

&lt;/goals&gt; 

&lt;/pluginExecutionFilter&gt; 

&lt;action&gt; 

&lt;ignore /&gt; 

&lt;/action&gt; 

&lt;/pluginExecution&gt; 

&lt;/pluginExecutions&gt; 

&lt;/lifecycleMappingMetadata&gt; 

&lt;/configuration&gt; 

&lt;/plugin&gt; 

即可在Eclipse中正常使用。

     本文转自mushiqianmeng 51CTO博客,原文链接:http://blog.51cto.com/mushiqianmeng/722305,如需转载请自行联系原作者

继续阅读