编译环境: 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,一般不会出错了...