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

    环境依赖:

    Eclipse+Maven Eclipse Plugin

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

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

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

3.         配置依赖关系pom.xml

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

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

  1.     <modelVersion>4.0.0</modelVersion> 
  2.     <groupId>lhz.home.nocloud</groupId> 
  3.     <artifactId>nocloud-parent</artifactId> 
  4.     <version>0.0.1-SNAPSHOT</version> 
  5.  
  6.     <packaging>pom</packaging> 
  7.      <properties> 
  8.        <activemq.version>5.5.0</activemq.version> 
  9.        <cglib.version>2.2.2</cglib.version> 
  10.   <springframework.version>3.0.6.RELEASE</springframework.version> 
  11. <springframework-roo.version>1.0.2.RELEASE</springframework-roo.version> 
  12.      ………… 
  13.   </properties> 
  14.    <dependencyManagement> 
  15.        <dependencies> 
  16.            <dependency> 
  17.               <groupId>org.restlet.jse</groupId> 
  18.               <artifactId>org.restlet</artifactId> 
  19.               <version>${restlet.version}</version> 
  20.            </dependency> 
  21.            <dependency> 
  22.               <groupId>org.springframework</groupId> 
  23.               <artifactId>spring-core</artifactId> 
  24.               <version>${springframework.version}</version> 
  25.            </dependency> 
  26.            ………… 
  27.            </dependencies> 
  28.     </dependencyManagement> 
  29.  
  30.     <repositories> 
  31.        <repository> 
  32.            <id>maven-restlet</id> 
  33.            <name>Public online Restlet repository</name> 
  34.            <url>http://maven.restlet.org</url> 
  35.        </repository> 
  36.     </repositories> 
  37. </project> 

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

nocloud-webpom.xml文件:

  1.     <modelVersion>4.0.0</modelVersion> 
  2.   <artifactId>nocloud-web</artifactId> 
  3.     <parent> 
  4.        <groupId>lhz.home.nocloud</groupId> 
  5.        <artifactId>nocloud-parent</artifactId> 
  6.        <version>0.0.1-SNAPSHOT</version> 
  7.     </parent> 
  8.     <dependencies> 
  9.      <dependency> 
  10.           <groupId>org.springframework</groupId> 
  11.            <artifactId>spring-context</artifactId> 
  12.        </dependency> 
  13.        <dependency> 
  14.            <groupId>org.springframework</groupId> 
  15.            <artifactId>spring-tx</artifactId> 
  16.        </dependency> 
  17. ………………
  18.     </dependencies> 
  19.     <build> 
  20.     <plugins> 
  21.       <plugin> 
  22.          <groupId>org.apache.maven.plugins</groupId> 
  23.          <artifactId>maven-dependency-plugin</artifactId> 
  24.          <version>2.1</version> 
  25.          <executions> 
  26.               <execution> 
  27.                <id>copy-dependencies</id> 
  28.                <phase>package</phase> 
  29.                <goals> 
  30.                 <goal>copy-dependencies</goal> 
  31.                </goals>           
  32.                <configuration> 
  33.                 <outputDirectory>${basedir}/WebContent/WEB-INF/lib</outputDirectory> 
  34.                </configuration> 
  35.               </execution> 
  36.              </executions> 
  37.         </plugin> 
  38.    </plugins> 
  39.    </build> 
  40. </project> 

这里着重说明下<build>的部分。利用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拷贝到指定的目录下。

或者加入以下内容:

  1. <plugin> 
  2. <groupId>org.eclipse.m2e</groupId> 
  3. <artifactId>lifecycle-mapping</artifactId> 
  4. <version>1.0.0</version> 
  5. <configuration> 
  6. <lifecycleMappingMetadata> 
  7. <pluginExecutions> 
  8. <pluginExecution> 
  9. <pluginExecutionFilter> 
  10. <groupId>org.apache.maven.plugins</groupId> 
  11. <artifactId>maven-dependency-plugin</artifactId> 
  12. <goals> 
  13. <goal>copy-dependencies</goal> 
  14. </goals> 
  15. </pluginExecutionFilter> 
  16. <action> 
  17. <ignore /> 
  18. </action> 
  19. </pluginExecution> 
  20. </pluginExecutions> 
  21. </lifecycleMappingMetadata> 
  22. </configuration> 
  23. </plugin> 

即可在Eclipse中正常使用。