天天看點

利用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,如需轉載請自行聯系原作者

繼續閱讀