IDEA&Maven工程多模块整合编译

编译环境: Ubuntu kylin 14.04, IntelliJ IDEA, jdk1.7


IDEA不似 myeclipse,在编写代码时,只能做到代码检测,而不会对整个项目进行实时编译,往往需要手工编译.
而且工程中各个模块都可以运行时,maven编译往往不通过.

编译一个含有多个modul的工程,需要注意一下几个问题:

1. 循环依赖

多个模块之间,往往存在代码共享,这样,很有可能出现循环以来的问题.
比如项目A中有A1, A2, A3三个模块,我们用A-->B代表A依赖B,这样就可能出现

循环依赖 A1 --> A2 --> A3--> A1
双向依赖 A1 <--> A2

这种情况下,编译不会通过,相当于一种死锁,如下图:

双向依赖

既然是在IDEA中,当然可以利用依赖图查找问题依赖,并尽量处理掉.
具体见http://blog.csdn.net/isea533/article/details/52180116
以及 http://hck.iteye.com/blog/1728329

2. 依赖库版本不一致

项目中module较多时,可能出现模块之间所依赖的第三方库版本不一致,甚至出现父pom与子pom之间的不一致,如果认为版本问题当然由第三方自己去解决,那就大错特错了.
这里就要用到<dependencyManagement>.
在父pom里对引用库版本进行控制,在子pom里去除版本:

<!-- 父pom进行版本控制 -->
        <dependencyManagement>
          <dependencies>
            <dependency>
                <groupId>com.google.guava</groupId>
                <artifactId>guava</artifactId>
                <version>20.0</version>
            </dependency>
          </dependencies>
        </dependencyManagement>
<!-- 子pom 去除版本信息 -->
          <dependencies>
            <dependency>
              <groupId>com.google.guava</groupId>
              <artifactId>guava</artifactId>
          </dependency>

这样,统一引入依赖,可以避免依赖库时多次查找统计版本,出现照顾不周全的问题.
Management可能还有其他功能,有待发现.

3. 多模块编译顺序混乱

这是难也是最容易解决的问题.
如果你分别对子模块进行编译,就要考虑相互之间的依赖关系,进而要理顺序,这样在模块较多的情况下,很难实现,另外,如果直接对总项目进行compile,依然会出现混乱的问题,还有无法加载本地jar包的问题.
这时,有一个简单的方法:

1>. 先对整个项目 install
2>. 有问题就解决问题,如去除 @Test用例中的error测试方法
3>. 直接对项目compile,一般不会出错了...

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,049评论 25 709
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,127评论 19 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,993评论 6 342
  • 写你的眉梢 弯弯如新月 从枝丫中来 缓缓上云霄 写你的星眸 斟满光酒 从遥远的森林尽头 望入深秋
    莲花星系阅读 213评论 2 2
  • 支持省、市、区、县、三级。 地址表来源取自淘宝我的地址管理的JS地址表 下载地址
    张海青阅读 358评论 0 0