Maven父子工程搭建详解

最近在学习Maven,把一个开源的项目改成maven管理,期间使用到了多项目,从网上查阅了一些资料,主要参考的是http://kyfxbl.iteye.com/blog/1680045,在此把自己的一些心得体会写出来,供大家学习交流。

关于maven的安装,在此就不进行阐述,请参考网上其他教程。

本实例由4个项目组成,其中,aggregator是父工程,同时承担聚合模块和父模块的作用,没有实际代码和资源文件;open-plagform-common是公共的java工程;open-platfor-web是公共的web文件,主要包括css、js等;open-bug-m是最终要发布的应用,形成war包。

一、建立一个Maven工程:aggregator

/aggregator

   /src/main/java

   /src/test/java

   pom.xml

此工程主要是父模块,聚合其他工程,没有实际代码和资源文件,最主要的是pom.xml文件,其主要内容如下:

 
  1. <modelVersion>4.0.0</modelVersion>

  2. <groupId>cn.jess.platform</groupId>

  3. <artifactId>aggregator</artifactId>

  4. <version>0.0.1-SNAPSHOT</version>

  5. <!-- 因为是父工程 ,因此此处的packaging必须为pom -->

  6. <packaging>pom</packaging>

  7. <name>aggregator</name>

  8.  
  9. <modules>

  10. <module>../open-platform-common</module>

  11. <module>../open-platform-web</module>

  12. <module>../open-bug-m</module>

  13. </modules>

  14.  
  15. <!-- 配置部署的远程仓库 -->

  16. <distributionManagement>

  17. <snapshotRepository>

  18. <id>nexus-snapshots</id>

  19. <name>nexus distribution snapshot repository</name>

  20. <url>http://127.0.0.1:8081/nexus/content/repositories/snapshots/</url>

  21. </snapshotRepository>

  22. </distributionManagement>

  23.  
  24. <build>

  25. <pluginManagement>

  26. <plugins>

  27.  
  28. <plugin>

  29. <groupId>org.apache.maven.plugins</groupId>

  30. <artifactId>maven-resources-plugin</artifactId>

  31. <version>2.6</version>

  32. <configuration>

  33. <encoding>UTF-8</encoding>

  34. </configuration>

  35. </plugin>

  36.  
  37. <plugin>

  38. <groupId>org.apache.maven.plugins</groupId>

  39. <artifactId>maven-compiler-plugin</artifactId>

  40. <version>2.5.1</version>

  41. <configuration>

  42. <encoding>UTF-8</encoding>

  43. <source>1.6</source>

  44. <target>1.6</target>

  45. </configuration>

  46. </plugin>

  47.  
  48. </plugins>

  49. </pluginManagement>

  50. </build>

  51.  
  52. <dependencyManagement>

  53.  
  54. <dependencies>

  55.  
  56. <dependency>

  57. <groupId>com.sun</groupId>

  58. <artifactId>tools</artifactId>

  59. <version>1.6.0</version>

  60. <scope>system</scope>

  61. <systemPath>${env.JAVA_HOME}/lib/tools.jar</systemPath>

  62. </dependency>

  63.  
  64. </dependencies>

  65.  
  66. </dependencyManagement>


二、建立一个Maven工程:open-platform-common

此工程主要是项目中使用到的公共java类库,pom文件主要内容如下:

 
  1. <!-- 由于存在parent工程,因此groupId和version可以省略,直接使用parent工程-->

  2. <modelVersion>4.0.0</modelVersion>

  3. <artifactId>open-platform-common</artifactId>

  4. <!-- 因为此工程要发布到webapp的lib目录下,因此为jar(不知道这样解释对否?) -->

  5. <packaging>jar</packaging>

  6. <properties>

  7. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

  8. </properties>

  9. <!-- 指定Maven仓库 -->

  10. <repositories>

  11. <!-- my的maven仓库 -->

  12. <repository>

  13. <id>myRepository</id>

  14. <name>local private nexus</name>

  15. <url>http://127.0.0.1:8081/nexus/content/groups/public/</url>

  16. <releases>

  17. <enabled>true</enabled>

  18. </releases>

  19. <snapshots>

  20. <enabled>true</enabled>

  21. </snapshots>

  22. </repository>

  23. </repositories>

  24. <!-- 指定maven plugin仓库 -->

  25. <pluginRepositories>

  26. <!-- oschina的maven plugin仓库 -->

  27. <pluginRepository>

  28. <id>myPluginRepository</id>

  29. <name>local private nexus</name>

  30. <url>http://127.0.0.1:8081/nexus/content/groups/public/</url>

  31. <releases>

  32. <enabled>true</enabled>

  33. </releases>

  34. <snapshots>

  35. <enabled>false</enabled>

  36. </snapshots>

  37. </pluginRepository>

  38. </pluginRepositories>

  39. <dependencies>

  40. <!-- 此处的类库根据自己的需要进行添加 -->

  41. </dependencies>

  42. <!-- 用来指定父工程-->

  43. <parent>

  44. <groupId>cn.jess.platform</groupId>

  45. <artifactId>aggregator</artifactId>

  46. <version>0.0.1-SNAPSHOT</version>

  47. <relativePath>../aggregator</relativePath>

  48. </parent>


三、建立一个Maven工程:open-platform-web

    此工程主要是项目中使用到的公共web文件,pom文件主要内容如下:

 
  1. <!-- 由于存在parent工程,因此groupId和version可以省略,直接使用parent工程-->

  2. <modelVersion>4.0.0</modelVersion>

  3. <artifactId>open-platform-web</artifactId>

  4. <!-- 因为此工程要发布到webapp应用的根目录下,因此为war(不知道这样解释对否?) -->

  5. <packaging>war<ng>

  6. <properties>

  7. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

  8. </properties>

  9. <!-- 指定Maven仓库 -->

  10. <repositories>

  11. <!-- my的maven仓库 -->

  12. <repository>

  13. <id>myRepository</id>

  14. <name>local private nexus</name>

  15. <url>http://127.0.0.1:8081/nexus/content/groups/public/</url>

  16. <releases>

  17. <enabled>true</enabled>

  18. </releases>

  19. <snapshots>

  20. <enabled>true</enabled>

  21. </snapshots>

  22. </repository>

  23. </repositories>

  24. <!-- 指定maven plugin仓库 -->

  25. <pluginRepositories>

  26. <!-- oschina的maven plugin仓库 -->

  27. <pluginRepository>

  28. <id>myPluginRepository</id>

  29. <name>local private nexus</name>

  30. <url>http://127.0.0.1:8081/nexus/content/groups/public/</url>

  31. <releases>

  32. <enabled>true</enabled>

  33. </releases>

  34. <snapshots>

  35. <enabled>false</enabled>

  36. </snapshots>

  37. </pluginRepository>

  38. </pluginRepositories>

  39.  
  40. <parent>

  41. <groupId>cn.jess.platform</groupId>

  42. <artifactId>aggregator</artifactId>

  43. <version>0.0.1-SNAPSHOT</version>

  44. <relativePath>../aggregator</relativePath>

  45. </parent>

  46. </project>


注意:此工程的WEB-INF目录下必须包含web.xml文件,否则在执行mvn时会报错

    四、建立一个Maven工程:open-bug-m:

此工程是最终要发布的应用,其依赖于open-platform-common和open-platform-web,因此在pom文件中要加入这两个工程的依赖,pom文件内容如下所示:

 
  1. <groupId>open-bug-m</groupId>

  2. <artifactId>open-bug-m</artifactId>

  3. <packaging>war</packaging>

  4. <name/>

  5. <description/>

  6. <properties>

  7. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

  8. </properties>

  9. <parent>

  10. <groupId>cn.jess.platform</groupId>

  11. <artifactId>aggregator</artifactId>

  12. <version>0.0.1-SNAPSHOT</version>

  13. <relativePath>../aggregator</relativePath>

  14. </parent>

  15. <!-- 指定Maven仓库 -->

  16. <repositories>

  17. <!-- my的maven仓库 -->

  18. <repository>

  19. <id>myRepository</id>

  20. <name>local private nexus</name>

  21. <url>http://127.0.0.1:8081/nexus/content/groups/public/</url>

  22. <releases>

  23. <enabled>true</enabled>

  24. </releases>

  25. <snapshots>

  26. <enabled>true</enabled>

  27. </snapshots>

  28. </repository>

  29. </repositories>

  30. <!-- 指定maven plugin仓库 -->

  31. <pluginRepositories>

  32. <!-- oschina的maven plugin仓库 -->

  33. <pluginRepository>

  34. <id>myPluginRepository</id>

  35. <name>local private nexus</name>

  36. <url>http://127.0.0.1:8081/nexus/content/groups/public/</url>

  37. <releases>

  38. <enabled>true</enabled>

  39. </releases>

  40. <snapshots>

  41. <enabled>false</enabled>

  42. </snapshots>

  43. </pluginRepository>

  44. </pluginRepositories>

  45. <dependencies>

  46. <dependency>

  47. <groupId>cn.jess.platform</groupId>

  48. <artifactId>open-platform-common</artifactId>

  49. <version>0.0.1-SNAPSHOT</version>

  50. <type>jar</type>

  51. </dependency>

  52. <dependency>

  53. <groupId>cn.jess.platform</groupId>

  54. <artifactId>open-platform-web</artifactId>

  55. <version>0.0.1-SNAPSHOT</version>

  56. <type>war</type>

  57. </dependency>

  58. <!-- 此处的类库根据自己的需要进行添加 -->

  59.  
  60.  
  61. </dependencies>

  62. <build>

  63. <finalName>open-bug</finalName>

  64. <plugins>

  65. <plugin>

  66. <groupId>org.apache.maven.plugins</groupId>

  67. <artifactId>maven-war-plugin</artifactId>

  68. <version>2.3</version>

  69. <configuration>

  70. <packagingExcludes>WEB-INF/web.xml</packagingExcludes>

  71. <overlays>

  72. <overlay>

  73. <groupId>cn.jess.platform</groupId>

  74. <artifactId>open-platform-web</artifactId>

  75. </overlay>

  76. </overlays>

  77. </configuration>

  78. </plugin>

  79. <plugin>

  80. <groupId>org.codehaus.cargo</groupId>

  81. <artifactId>cargo-maven2-plugin</artifactId>

  82. <version>1.2.3</version>

  83. <configuration>

  84. <container>

  85. <containerId>tomcat7x</containerId>

  86. <home>F:\apache-tomcat-7.0.42(x64)</home>

  87. </container>

  88. <configuration>

  89. <type>existing</type>

  90. <home>F:\apache-tomcat-7.0.42(x64)</home>

  91. <properties>

  92. <cargo.jvmargs>

  93. -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8787

  94. </cargo.jvmargs>

  95. </properties>

  96. </configuration>

  97. </configuration>

  98. <executions>

  99. <execution>

  100. <id>cargo-run</id>

  101. <phase>pre-integration-test</phase>

  102. <goals>

  103. <goal>run</goal>

  104. </goals>

  105. </execution>

  106. </executions>

  107. </plugin>

  108. </plugins>

  109. </build>


关于maven-war-plugin和cargo-maven2-plugin的使用方法请参考网上其他使用教程。

所有上述四个工程准备就绪后,执行mvn install就可对工程项目进行部署。

1. 创建一个新maven项目

2.

3. 输入groupid和artifactid,后面步骤直接next,最后finish

4.创建好后

5. 在主项目名称上点右键,创建第一个子模块

6

7

8 同理,在创建一个模块,创建好后

 9 打开Project Structure将2个子模块的src/mian/java目录设置为Sources,只有设置为sources了,后面才能创建Class.

10 设置项目中childmoduletwo依赖于childmoduleone

 11

12 前面设置后,只是为了再调用依赖代码时静态编译通过,也就是说仅仅是在写代码时,childmoduletwo调用childmoduleone不提示错误,实际运行时会出错的。

所以还需要在pom文件设置依赖。

13 childmoduleone中创建一个类One,写一个个测试方法,后面会被childmoduletwo调用

14 childmoduletwo中写一个类Two,用来调用One中的sayHello方法

15 运行Two

ps: 现在很多大型项目都是划分多个模块的,有的模块之间还有依赖关系,本文创建了一个有多个模块的maven项目,并且在模块之间添加了依赖关系,最后简单测试了依赖模块的调用。

发布了88 篇原创文章 · 获赞 383 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/weixin_42047611/article/details/81137213
今日推荐