随笔-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.fanlychiegroupid>
<artifactid>projartifactid>
<version>1.0-snapshotversion>
<packaging>pompackaging>
声明子模块
<modules>
  <module>proj-modelmodule>
  <module>proj-daomodule>
  <module>proj-servicemodule>
  <module>proj-webmodule>
modules>
在父模块中可以通过 dependencymanagement 对依赖的包进行统一的管理
<properties>
  <spring.version>4.1.5.releasespring.version>
properties>
<dependencymanagement>
  <dependencies>
    <dependency>
      <groupid>org.fanlychiegroupid>
      <artifactid>proj-daoartifactid>
      <version>${project.version}version>
    dependency>
    <dependency>
      <groupid>org.fanlychiegroupid>
      <artifactid>proj-modelartifactid>
      <version>${project.version}version>
    dependency>
    <dependency>
      <groupid>org.fanlychiegroupid>
      <artifactid>proj-serviceartifactid>
      <version>${project.version}version>
    dependency>
    <dependency>
      <groupid>org.springframeworkgroupid>
      <artifactid>spring-contextartifactid>
      <version>${spring.version}version>
    dependency>
    <dependency>
      <groupid>org.springframeworkgroupid>
      <artifactid>spring-webmvcartifactid>
      <version>${spring.version}version>
    dependency>
  dependencies>
dependencymanagement>
配置完成之后,父模块以及父模块的子模块不会引入任何的构件依赖,这只是为了让子模块能够继承得到这些配置,这样做的好处是,在子模块中只
需要声明 groupid 和 artifactid 不需要声明 version 就能准确的获取得到依赖的构件。这样一来,不仅能够使子模块的依赖配置变得简单,
还能使项目范围内所有依赖的构件的版本能够得到统一,它们可以在父模块中统一的来管理,这样可以避免模块之间由于版本不一致而引发的异常。
你还可以在父模块中通过 pluginmanagement 来对依赖的插件进行统一的管理
<build>
  <pluginmanagement>
    <plugins>
      <plugin>
        <groupid>org.eclipse.jettygroupid>
        <artifactid>jetty-maven-pluginartifactid>
        <version>9.2.8.v20150217version>
      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.0modelversion>
  <groupid>org.fanlychiegroupid>
  <artifactid>projartifactid>
  <version>1.0-snapshotversion>
  <packaging>pompackaging>
  <name>projname>
  <url>http://maven.apache.orgurl>
  <properties>
    <spring.version>4.1.5.releasespring.version>
  properties>
  <modules>
    <module>proj-modelmodule>
    <module>proj-daomodule>
    <module>proj-servicemodule>
    <module>proj-webmodule>
  modules>
  <dependencymanagement>
    <dependencies>
      <dependency>
        <groupid>org.fanlychiegroupid>
        <artifactid>proj-daoartifactid>
        <version>${project.version}version>
      dependency>
      <dependency>
        <groupid>org.fanlychiegroupid>
        <artifactid>proj-modelartifactid>
        <version>${project.version}version>
      dependency>
      <dependency>
        <groupid>org.fanlychiegroupid>
        <artifactid>proj-serviceartifactid>
        <version>${project.version}version>
      dependency>
      <dependency>
        <groupid>org.springframeworkgroupid>
        <artifactid>spring-contextartifactid>
        <version>${spring.version}version>
      dependency>
      <dependency>
        <groupid>org.springframeworkgroupid>
        <artifactid>spring-webmvcartifactid>
        <version>${spring.version}version>
      dependency>
    dependencies>
  dependencymanagement>
  <build>
    <pluginmanagement>
      <plugins>
        <plugin>
          <groupid>org.eclipse.jettygroupid>
          <artifactid>jetty-maven-pluginartifactid>
          <version>9.2.8.v20150217version>
        plugin>
      plugins>
    pluginmanagement>
  build>
project>

子模块 proj-model/pom.xml 配置

作为子模块,需要在 pom.xml 中声明其父模块
<parent>
  <groupid>org.fanlychiegroupid>
  <artifactid>projartifactid>
  <version>1.0-snapshotversion>
parent>
gav(groupid、artifactid、version)参考父模块。
maven 默认认为父模块是在当前项目 pom.xml 所在的目录的上一级目录中,这里的 proj 项目结构设计符合这个规则。如果你的项目结构并不是
这样,你必须通过 节点来指定你的父模块 pom.xml 所在的路径(默认是 ../)。
<parent>
  <groupid>org.fanlychiegroupid>
  <artifactid>projartifactid>
  <version>1.0-snapshotversion>
  <relativepath>../relativepath>
parent>
proj-model/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.0modelversion>
  <parent>
    <groupid>org.fanlychiegroupid>
    <artifactid>projartifactid>
    <version>1.0-snapshotversion>
  parent>
  <artifactid>proj-modelartifactid>
  <packaging>jarpackaging>
  <name>proj-model projectname>
  <url>http://maven.apache.orgurl>
project>
groupid 和 version 会从父模块中继承,在子模块中不需要再配置。

子模块 proj-dao/pom.xml 配置

为该模块声明 proj-model 的依赖,因为该模块需要使用 proj-model 模块中的数据模型
<dependencies>
  <dependency>
    <groupid>org.fanlychiegroupid>
    <artifactid>proj-modelartifactid>
  dependency>
dependencies>
proj-dao/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.0modelversion>
  <parent>
    <groupid>org.fanlychiegroupid>
    <artifactid>projartifactid>
    <version>1.0-snapshotversion>
  parent>
  <artifactid>proj-daoartifactid>
  <packaging>jarpackaging>
  <name>proj-dao projectname>
  <url>http://maven.apache.orgurl>
  <dependencies>
    <dependency>
      <groupid>org.fanlychiegroupid>
      <artifactid>proj-modelartifactid>
    dependency>
  dependencies>
project>

子模块 proj-service/pom.xml 配置

为该模块声明 proj-model、proj-dao 模块的依赖,因为该模块需要使用 proj-model 中的数据模型和 proj-dao 中的数据库访问接口
<dependencies>
  <dependency>
    <groupid>org.fanlychiegroupid>
    <artifactid>proj-modelartifactid>
  dependency>
  <dependency>
    <groupid>org.fanlychiegroupid>
    <artifactid>proj-daoartifactid>
  dependency>
dependencies>
proj-service/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.0modelversion>
  <parent>
    <groupid>org.fanlychiegroupid>
    <artifactid>projartifactid>
    <version>1.0-snapshotversion>
  parent>
  <artifactid>proj-serviceartifactid>
  <packaging>jarpackaging>
  <name>proj-service projectname>
  <url>http://maven.apache.orgurl>
  <dependencies>
    <dependency>
      <groupid>org.fanlychiegroupid>
      <artifactid>proj-modelartifactid>
    dependency>
    <dependency>
      <groupid>org.fanlychiegroupid>
      <artifactid>proj-daoartifactid>
    dependency>
  dependencies>
project>

子模块 proj-web/pom.xml 配置

为该模块声明 proj-model、proj-service 的依赖,因为 proj-web 需要使用 proj-model 中的数据模型和 proj-service 中的业务逻辑
<dependencies>
  <dependency>
    <groupid>org.fanlychiegroupid>
    <artifactid>proj-modelartifactid>
  dependency>
  <dependency>
    <groupid>org.fanlychiegroupid>
    <artifactid>proj-serviceartifactid>
  dependency>
dependencies>
proj-web/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/maven-v4_0_0.xsd">
  <modelversion>4.0.0modelversion>
  <parent>
    <groupid>org.fanlychiegroupid>
    <artifactid>projartifactid>
    <version>1.0-snapshotversion>
  parent>
  <artifactid>proj-webartifactid>
  <packaging>warpackaging>
  <name>proj-web projectname>
  <url>http://maven.apache.orgurl>
  <dependencies>
    <dependency>
      <groupid>org.fanlychiegroupid>
      <artifactid>proj-modelartifactid>
    dependency>
    <dependency>
      <groupid>org.fanlychiegroupid>
      <artifactid>proj-serviceartifactid>
    dependency>
  dependencies>
  <build>
    <finalname>proj-webfinalname>
  build>
project>

导入项目到 eclipse

配置完成之后,接下来可以将项目导入到 eclipse,在 eclipse 中右键 --> import --> maven --> existing maven projects,将 proj
项目所在的路径复制粘贴到 root directory 栏并敲回车,点击 finish 按钮即可。

导入后的项目结构

示例源码下载:
示例使用 jetty 作为 web 服务器,选中 proj-web --> 右键 --> run as --> maven build... --> goals 栏输入 jetty:run

记得把 resolve workspace artifacts 选项勾选上,否则启动时会报错。访问方式:

打包

选中父模块项目 proj --> 右键 --> run as --> maven build... --> goals 栏输入 clean package 并执行。
[info] scanning for projects...
[info] ------------------------------------------------------------------------
[info] reactor build order:
[info] 
[info] proj
[info] proj-model project
[info] proj-dao project
[info] proj-service project
[info] proj-web project
[info]                                                                         
[info] ------------------------------------------------------------------------
. . . . . .
[info] ------------------------------------------------------------------------
[info] reactor summary:
[info] 
[info] proj ............................................... success [  0.002 s]
[info] proj-model project ................................. success [  1.100 s]
[info] proj-dao project ................................... success [  0.102 s]
[info] proj-service project ............................... success [  0.069 s]
[info] proj-web project ................................... success [  0.552 s]
[info] ------------------------------------------------------------------------
[info] build success
[info] ------------------------------------------------------------------------
 
可以看到,maven 在 build 的时候,会根据模块之间的依赖关系,整理出一个 build 的顺序,然后再按顺序来 build。
执行完 package 后,各个子模块的 target 目录下会输出相应的 jar 或 war 包。


  
posted on 2015-06-27 16:47 fancydeepin 阅读(27715) 评论(0)  编辑  收藏 所属分类: maven
网站地图