要: Maven多模块项目搭建,可以通过合理的模块拆分,实现代码复用,便于维护管理,可以根据需要配置指定的模块。

__kindeditor_temp_url__   http://git.oschina.net/alexgaoyh/MutiModule-parent

最近一直在思考如何能够更好的重用代码。减少重复劳动,之前有一篇文章通过导入JAR包的形式,可以重用部分形如util类的方法,但是这样的话,管理起来jar包,特别是协同工作,多项目情况下,管理JAR会出现某些版本不统一的情况, 刚好最近在看Maven相关的资料,突然发现使用Maven是一个很好地方法。

1: 本地通过创建Nexus私服仓库,可以将相关的项目打包jar上传到第三方仓库里面进行依赖,每次版本迭代,直接从Nexus私服仓库里面取出来最新的jar包即可。同时如果存在多项目依赖相同的jar包,亦可以创建仓库进行区别对待,很好也很简单的方法,这里不过多进行介绍。

2: Maven的多模块项目,感觉多模块项目,很适合一些较大的项目,能够很细化的拆分模块,比如说一个Web站点,默认会有很多模块  ”验证码相关模块“”邮件相关模块“ ”登陆检验模块“……,很多的这些模块,其实是可以拆分为多个模块,这样就可以便于维护。

本文主要介绍 Maven模块项目:

创建一个Maven Project 选择 maven-archetype-quickstart

项目创建完成之后,修改buildPath相关(src/main/java src/main/resources……); JDK ……

项目右键--》New--》Maven Module--》输入 MutiModule-captcha(验证码相关模块)--》选择maven-archetype-quickstart

PS: 如果报错 The parent project must have a packaging type of POM

是将pom.xml 中的  <packaging>jar</packaging> 改成  <packaging>pom</packaging>

创建成功之后如下图:

其中 captcha 项目里面包含了验证码的相关操作,并且功能已经实现,项目右键成功通过junit测试。

20150409  更新:

设想如下图所示:

MutiModule-captcha项目里面定义的bean(captchaService),通过jar依赖的方式到MutiModule-service里面,就可以在service项目里面应用到captcha项目的bean,做更高一级的封装操作。

期间遇到不少奇葩的问题,这里做一下记录:

我使用的是maven3, 项目执行 mvn deploy 的时候,Snapshot(快照)形式的项目打包后会自动增加时间戳的部分, maven3 deploy jar snapshot  uniqueVersion 时间戳 : 查询相关资料发现:

Non-unique Snapshot Deployments

The setting <uniqueVersion>false</uniqueVersion> for a distribution repository has no effect in version 3.x, snapshot artifacts will always be deployed using a timestamped version.

Unique Snapshot Versions and Classifiers

As described in MNG-4452, Maven 3 now supports deploying artifacts with different classifiers from a different build or source and having them properly resolved.

This may impact Maven 2 or other clients that use the repository metadata to determine the version, since the version of the POM would be out of sync with the latest version of some artifacts. While this behavior matches the result of attempting to do the same in Maven 2, please be aware that you will not be able to successfully make subsequent deployments from Maven 3 if you have Maven 2 clients accessing the repository.

Additionally, some repository managers and versions of Maven prior to 2.0.10 may not cope with the additional XML elements in the metadata file. If this is the case in your environment, you can disable the additional information by setting the maven.metadata.legacy system property to true when running Maven.

大概意思就是,Snapshot类型的项目,会在发布jar的时候,自动增加一个时间戳的功能,Maven2的话,是有uniqueVersion可以操作的,但是Maven3是不支持这种做法了, 发现这个问题之后,直接把Snapshot 改为了 release ,简单有效,这样发布的版本就不带后面的时间戳了,项目依赖的话,也不用纠结后面时间戳的不同造成经常改动pom.xml 的配置了。

-----------------

Maven deploy Return code is : 400

默认将jar部署到Relases仓库的时候,会出现这个错误,原因是Release仓库默认将Deployment Policy ‘disable’ 修改一下就可以了。

此时在对MutiModule-service进行单元测试的时候,可能会出现问题,例如找不到对应的MutiModule-captcha的jar文件,这里按照之前的流程,可以将对应的jar上传到本地Nexus私服里面,配置Maven部署构件至Nexus

增加配置到pom.xml

<!-- 使用maven 部署构件至Nexus -->
<distributionManagement>  
        <repository>  
            <id>releases</id>  
            <name>Local Nexus Repository</name>  
            <url>http://127.0.0.1:8081/nexus/content/repositories/releases/</url>  
        </repository>  
        <snapshotRepository>  
            <id>Snapshots</id>  
            <name>Local Nexus Repository</name>  
            <url>http://127.0.0.1:8081/nexus/content/repositories/snapshots</url>  
        </snapshotRepository>  
    </distributionManagement>

修改Maven conf settings.xml 文件 增加 server配置

<servers><server>  
    <id>releases</id>  
    <username>admin</username>  
    <password>123admin</password>  
    </server>  
    <server>  
    <id>Snapshots</id>  
    <username>admin</username>  
    <password>123admin</password>  
    </server>   
 </servers>  
 
 url地址要指向Nexus中的实际地址,repository的id与settings.xml中的文件中servers中节点一样。 
 
 这样对MutiModule-captcha 执行 mvn install

命令执行顺序

mvn clean install/deploy 的执行顺序的话, 比如parent service captcha 三个项目,maven 根据自己的Reactor机制决定哪个模块应该先执行,这里service模块依赖于captcha,那么会在captcha先执行 mvn clean install 之后在service执行(由于captcha已经执行,安装到本地Repository中,便能找到依赖的模块)

但是总体的执行顺序为 parent captcha service,原因在于parent是其他两个模块的父模块,都对他存在依赖关系,但是captcha又被service依赖,所以在captcha执行,最后在service上面执行。

https://cwiki.apache.org/confluence/display/MAVEN/Maven+3.x+Compatibility+Notes#Maven3.xCompatibilityNotes-UniqueSnapshotVersionsandClassifiers

http://stackoverflow.com/questions/4275466/how-do-you-deal-with-maven-3-timestamped-snapshots-efficiently

转载于:https://www.cnblogs.com/telwanggs/p/6419874.html

Maven多模块项目搭建相关推荐

  1. Springboot+Mybatis+Druid+Maven多模块项目搭建遇到的各种吭

    Springboot+Mybatis+Druid+Maven多模块项目搭建 这里记录一下搭建多模块遇到的吭 首先建立一个父级空项目,在pox里修改下配置 2,建立DaoMapper层和ModelEnt ...

  2. springboot基于maven多模块项目搭建(直接启动webApplication)

    1. 新建maven项目springboot-module 2.把src删掉,新建module项目 springboot-module-api springboot-module-model spri ...

  3. ajax动态加载公共模块,Maven多模块项目搭建+SSM框架整合(四、Ajax异步获取数据,jq动态添加)...

    最近有点小忙,但是还是在晚上抽出来点时间更新文章,希望对初学者有帮助(都是从那时候过来的,哈哈)一起努力. 开始正题~~~~ 封装类ResultVo 在与前台页面交互的过程中我们一般会用到一个封装类, ...

  4. 搭建空的maven多模块项目架构并且上传到远程git仓库(超详细 cmd命令版本)

    2019独角兽企业重金招聘Python工程师标准>>> 首先看标题分为二部分 搭建空的maven多模块项目 上传到远程git远程仓库 第一步详细教程: 一: 二: 注意点:记住什么都 ...

  5. IDEA下Maven多模块项目介绍和搭建

    为什么80%的码农都做不了架构师?>>>    1Maven多模块项目介绍 为了便于演示和表达,在intellij中建了小项目进行举例,如下图所示 其中web-m2模块,依赖于com ...

  6. maven 按业务拆分模块_关于maven单项目拆分为Maven多模块项目

    最近工作遇到Maven单项目拆分多模块项目问题,故简作记录 相关分支如下: Master(线上分支) Split(拆分分支) UnionDev(团队成员同步开发合并分支) Dev1(团队成员同步开发分 ...

  7. SpringBoot+Maven 多模块项目的构建、运行、打包实战

    https://www.jb51.net/article/140772.htm?proxy=1 这篇文章主要介绍了SpringBoot+Maven 多模块项目的构建.运行.打包实战,小编觉得挺不错的, ...

  8. Maven多模块项目中应用maven-tomcat-plugin热部署

    Maven多模块项目中使用maven-tomcat-plugin热部署 比如有一个父模块xfl(类型为pom的maven项目),其中的pom.xml为: <modules> <mod ...

  9. 【sprinb-boot】maven 多模块项目:单独 spring-boot:run 某个模块

    目录 前言 假设的 maven 多模块项目 模块关系1 模块关系2 模块关系3 模块关系4 示例:模块关系1 1,my-parent1/pom.xml 文件 2,my-parent1/my-app1/ ...

最新文章

  1. 机器学习中的数学基础:(1.1)矩阵特征值和特征向量的几何意义
  2. Hadoop中通过ToolRunner和Configured实现直接读取命令行动态出入reduce task数量,jar文件等
  3. Beam概念学习系列之SDKs
  4. 运算优先级、类型转换
  5. CAD插件学习系列教程(五) 小菜选择易
  6. 秒杀系统架构分析与实战
  7. Android EditText属性大全
  8. echarts 词云图
  9. led时间代码html,LED旋转时钟制作(有源代码)
  10. 月星当空,月光洒落树梢透进窗户,白的苦楚,寥寂随之上心头
  11. 60几行代码绘制丘比特爱情之箭!
  12. egg mysql 模糊搜索_使用egg-mysql操作mysql数据库
  13. 蓝桥杯每日一题(22):三升序列(python)
  14. Auto.js 找图 找色 剪切图片 坐标区域计算方法
  15. 两个单词之间的编辑距离
  16. python实现地理位置类数据爬取与geohash应用初探
  17. liblensfun 在 mingw 上编译时遇到的奇怪问题
  18. 白加黑过360启动项工具源码发布 多文件过启动项代码
  19. JIS-CTF 靶机渗透
  20. 用python解“厘米换算英尺英寸”问题

热门文章

  1. ControllerContext分析
  2. (83)建立时间与保持时间时序分析技巧
  3. (13)Zynq DDR控制器介绍
  4. 用java编写一个课表串口,安卓课程表源代码
  5. java内存泄漏跟栈溢出,8.《深入理解Java虚拟机》内存溢出和内存泄露、并行和并发、Minor GC和Full GC、Client模式和Server模式的区别...
  6. 智伴机器人三级分销模式_企业选择微信三级分销定制开发原因?
  7. Linux下pthread的读写锁的优先级问题
  8. 安卓+4.0.4+java模拟器_Android 4.0.4模拟器安装完全教程(图文)
  9. mysql report参数_mysqlreport 使用说明
  10. 《深入理解 Spring Cloud 与微服务构建》第十章 路由网关 Spring Cloud Zuul