随笔-126  评论-247  文章-5  trackbacks-0

项目结构

proj
  |
  |— proj-model
  |      |
  |      |— src
  |      |— pom (jar)
  |      |
  |
  |— proj-dao
  |      |
  |      |— src
  |      |— pom (jar)
  |      |
  |
  |— proj-service
  |      |
  |      |— src
  |      |— pom (jar)
  |      |
  |
  |— proj-web
  |      |
  |      |— src
  |      |— pom (war)
  |      |
  |
  |— pom.xml (pom)
  |

这里的 proj 项目分了 4 个模块,它们分别是:proj-model(数据模型层)、proj-dao(数据库访问层)、proj-service(业务逻辑层)、
proj-web(页面表现层)。下面我们来依次的来创建这几个项目(确保你的 maven 环境已经配置好,以下是 window 环境的 cmd 终端操作) 。

创建模块项目

01.创建 proj 项目
mvn archetype:create -DgroupId=org.fanlychie -DartifactId=proj
 
02.创建 proj-model 项目
mvn archetype:create -DgroupId=org.fanlychie -DartifactId=proj-model
 
03.创建 proj-dao 项目
mvn archetype:create -DgroupId=org.fanlychie -DartifactId=proj-dao
 
04.创建 proj-service 项目
mvn archetype:create -DgroupId=org.fanlychie -DartifactId=proj-service
 
05.创建 proj-web 项目
mvn archetype:create -DgroupId=org.fanlychie -DartifactId=proj-web -DarchetypeArtifactId=maven-archetype-webapp
 
06.将 proj-model、proj-dao、proj-service、proj-web 移动到 proj 目录里
for /r /d %i in (proj-*) do move %i proj
 
07.删除 proj/src 文件夹(proj 作为父模块,不需要 src)
rd /S /Q proj\src
 
08.为 proj-web 创建 src/main/java 目录
mkdir proj\proj-web\src\main\java
 
09.为 proj-web 创建 src/test/java 目录
mkdir proj\proj-web\src\test\java
 
10.删除 proj-model、proj-dao、proj-service、proj-web 项目 src/main/java 的源文件(忽略错误)
for /r /d %i in (proj\proj-*) do rd /S /Q %i\src\main\java\org
 
11.删除 proj-model、proj-dao、proj-service、proj-web 项目 src/test/java 的源文件(忽略错误)
for /r /d %i in (proj\proj-*) do rd /S /Q %i\src\test\java\org

父模块 proj/pom.xml 配置

作为父模块,packaging 类型必须是 pom
<groupId>org.fanlychie</groupId>
<artifactId>proj</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
声明子模块
<modules>
  <module>proj-model</module>
  <module>proj-dao</module>
  <module>proj-service</module>
  <module>proj-web</module>
</modules>
在父模块中可以通过 dependencyManagement 对依赖的包进行统一的管理
<properties>
  <spring.version>4.1.5.RELEASE</spring.version>
</properties>
<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.fanlychie</groupId>
      <artifactId>proj-dao</artifactId>
      <version>${project.version}</version>
    </dependency>
    <dependency>
      <groupId>org.fanlychie</groupId>
      <artifactId>proj-model</artifactId>
      <version>${project.version}</version>
    </dependency>
    <dependency>
      <groupId>org.fanlychie</groupId>
      <artifactId>proj-service</artifactId>
      <version>${project.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${spring.version}</version>
    </dependency>
  </dependencies>
</dependencyManagement>
配置完成之后,父模块以及父模块的子模块不会引入任何的构件依赖,这只是为了让子模块能够继承得到这些配置,这样做的好处是,在子模块中只
需要声明 groupId 和 artifactId 不需要声明 version 就能准确的获取得到依赖的构件。这样一来,不仅能够使子模块的依赖配置变得简单,
还能使项目范围内所有依赖的构件的版本能够得到统一,它们可以在父模块中统一的来管理,这样可以避免模块之间由于版本不一致而引发的异常。
你还可以在父模块中通过 pluginManagement 来对依赖的插件进行统一的管理
<build>
  <pluginManagement>
    <plugins>
      <plugin>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-maven-plugin</artifactId>
        <version>9.2.8.v20150217</version>
      </plugin>
    </plugins>
  </pluginManagement>
</build>
proj/pom.xml 完整的配置:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation
="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.fanlychie</groupId>
  <artifactId>proj</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>pom</packaging>
  <name>proj</name>
  <url>http://maven.apache.org</url>
  <properties>
    <spring.version>4.1.5.RELEASE</spring.version>
  </properties>
  <modules>
    <module>proj-model</module>
    <module>proj-dao</module>
    <module>proj-service</module>
    <module>proj-web</module>
  </modules>
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.fanlychie</groupId>
        <artifactId>proj-dao</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>org.fanlychie</groupId>
        <artifactId>proj-model</artifactId>
        <version>${project.ver