zoukankan      html  css  js  c++  java
  • Maven学习(2)

    概述

    项目开发时,通常会将项目分为多个模块进行开发,本文讨论如何用Maven构建多模块的Java工程。

    软件环境

    Java:1.6.0_26

    Maven:3.1.1

    OS:WindowXP SP3

    项目模块说明

    示例工程分为多个模块,分别是:

    1. research_maven_javamm:父工程,聚合各模块。
    2. App:主模块,依赖ModuleA、ModuleB和ModuleCom
    3. ModuleA:模块A,依赖ModuleCom
    4. ModuleB:模块B,依赖ModuleCom
    5. ModuleCom:共通模块

    多模块项目整体构建使用Maven的父子继承能力。

    创建工程

    首先创建工程和各模块,然后配置各模块之间的依赖关系。

    项目的对第三方构件的依赖关系配置在父工程的pom.xml中,这样各模块可以省去第三方构件的依赖配置。

    创建父工程

    首先创建父工程应用

    创建脚本
    1. mvn archetype:create -DgroupId=com.github.hubin0011 -DartifactId=research_maven_javamm -DarchetypeArtifactId=maven-archetype-quickstart 
    修改父工程为Maven的父工程

    创建成功后,需要将父工程类型改为Maven的父工程,修改pom.xml文件的packaging属性为pom,如下:

    1. <packaging>pom</packaging>
    创建各模块工程

    父工程创建成功后,创建各模块工程。

    注意:创建各模块工程时,要先cd到父工程的根目录:

    1. cd research_maven_javamm 
    创建App主模块
    1. mvn archetype:create -DgroupId=com.github.hubin0011 -DartifactId=app -DarchetypeArtifactId=maven-archetype-quickstart 
    创建ModuleA工程
    1. mvn archetype:create -DgroupId=com.github.hubin0011 -DartifactId=module-a -DarchetypeArtifactId=maven-archetype-quickstart 
    创建ModuleB工程
    1. mvn archetype:create -DgroupId=com.github.hubin0011 -DartifactId=module-b -DarchetypeArtifactId=maven-archetype-quickstart 
    创建ModuleC工程
    1. mvn archetype:create -DgroupId=com.github.hubin0011 -DartifactId=module-com -DarchetypeArtifactId=maven-archetype-quickstart 

    创建各模块后,可以看到父工程research_maven_javamm的pom.xml文件中添加了子工程的信息:

    1. <modules>
    2. <module>app</module>
    3. <module>module-a</module>
    4. <module>module-b</module>
    5. <module>module-com</module>
    6. </modules>
    配置各模块依赖关系

    创建各模块工程后,需要对各模块工程之间的依赖关系进行配置。如之前说明的模块依赖关系:

    1. ModuleA依赖ModuleCom
    2. ModuleB依赖ModuleCom
    3. 主模块app依赖ModuleA、ModuleB和ModuleCom
    配置ModuleA依赖ModuleCom

    修改ModuleA的pom.xml文件,添加ModuleCom的依赖:

    1. <dependency>
    2. <groupId>com.github.hubin0011</groupId>
    3. <artifactId>module-com</artifactId>
    4. <version>1.0-SNAPSHOT</version>
    5. </dependency>
    配置ModuleB依赖ModuleCom

    修改ModuleB的pom.xml文件,添加ModuleCom的依赖:

    1. <dependency>
    2. <groupId>com.github.hubin0011</groupId>
    3. <artifactId>module-com</artifactId>
    4. <version>1.0-SNAPSHOT</version>
    5. </dependency>
    配置主模块app依赖ModuleA、ModuleB和ModuleCom

    修改app的pom.xml文件,添加ModuleA、ModuleB和ModuleCom的依赖:

    1. <dependency>
    2. <groupId>com.github.hubin0011</groupId>
    3. <artifactId>module-a</artifactId>
    4. <version>1.0-SNAPSHOT</version>
    5. </dependency>
    6. <dependency>
    7. <groupId>com.github.hubin0011</groupId>
    8. <artifactId>module-b</artifactId>
    9. <version>1.0-SNAPSHOT</version>
    10. </dependency>
    11. <dependency>
    12. <groupId>com.github.hubin0011</groupId>
    13. <artifactId>module-com</artifactId>
    14. <version>1.0-SNAPSHOT</version>
    15. </dependency>

    编译工程

    编译模块工程

    在模块工程的目录,执行如下脚本可以编译该模块工程:

    1. mvn clean compile 
    编译父工程

    在父工程的目录,执行如下脚本则编译整个工程:

    1. mvn clean compile 

    执行单体测试

    对模块工程进行单体测试

    在模块工程的目录,执行如下脚本可以运行该模块工程的单体测试:

    1. mvn clean test 
    对整个工程进行单体测试

    在父工程的目录,执行如下脚本则运行整个工程的单体测试:

    1. mvn clean test 

    打包

    打包模块工程

    在模块工程的目录,执行如下脚本可以打包该模块:

    1. mvn clean package 
    打包整个工程

    在父工程的目录,执行如下脚本则打包所有模块,在各模块的target目录会生成相应的jar构件:

    1. mvn clean package 

    发布构件到本地仓库

    发布模块工程到本地仓库

    在模块工程的目录,执行如下脚本可以发布该模块工程到本地仓库:

    1. mvn clean install 
    发布整个工程

    在父工程的目录,执行如下脚本则发布整个工程到本地仓库:

    1. mvn clean install 

    最佳实践

    • 父工程不应该有代码,所有的代码都应该查分到子模块中开发
    • 工程共通依赖的第三方构件应该在父工程的pom.xml中维护,各模块依赖的特殊构件可以在各模块的pom.xml中维护

    示例工程下载

    本文的示例工程可以从http://github.com/hubin0011/research/tree/master/maven/java_mm下载。

  • 相关阅读:
    BZOJ4669 抢夺(网络流)
    三元环&四元环计数
    P3768 简单的数学题(杜教筛)
    P1829 [国家集训队]Crash的数字表格(莫比乌斯反演)
    P5221 Product(欧拉函数)
    P3704 [SDOI2017]数字表格(莫比乌斯反演)
    P4619 [SDOI2018]旧试题
    Loj6102. 「2017 山东二轮集训 Day1」第三题(min-max 反演)
    Leetcode220 存在重复元素III
    Leetcode219 存在重复元素II 滑动窗口
  • 原文地址:https://www.cnblogs.com/wych/p/4071591.html
Copyright © 2011-2022 走看看