使用Maven两年多了,一点点的小心得,记录下来。
关于Maven的安装,调试,这个网上很多,推荐ITEYE上面的一系列博文。讲的很全面很易懂。
Maven JVM 参数
另外针对Maven运行时候容易出现的java.lang.OutOfMemoryError:PermGen space maven
简单的解决方法就是设置Maven JVM 参数。
Win7 64bit系统下的设置:
M2_OPTS=-Xms128m-Xmx1024m -XX:MaxPermSize=256m
Maven Dependency
Dependency最基本的特性如Groupid,artifactid, version 等就不累赘叙述了。从dependencyManagement开始说起。
dependencyManagement是用于定义依赖的全局信息,一般情况下是定义在最顶端的pom.xml中的。所有的成员或者子项目都继承于它。
这里面主要需要定义两种类型version版本和Scope 范围:
1,定义统一的依赖版本。也就是避免不同的子项目之间有依赖版本冲突。
比如,
<dependencyManagement>
<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
</dependency>
</dependencies>
</dependencyManagement>
定义了如上的全局信息以后,子项目中如果需要log4j作为依赖就不需要再定义<version>了
<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</dependency>
</dependencies>
2,定义统一的依赖范围。
什么时候需要这样的定义总体项目的依赖范围, 比如,我们使用JBOSS作为应用服务器,那些JBOSS服务器本身就已经自带的libs我们就可以总体的定义scope
<dependencyManagement>
<dependency>
<groupId>org.jboss.ws</groupId>
<artifactId>jbossws-spi</artifactId>
<version>1.4.1.GA</version>
<scope>provided</scope>
</dependency>
</dependencyManagement>
这样在子项目中就没有必要再重复考虑Scope特性了。
当架构师在项目初期架构考虑了以上因素,就减轻了协调开发人员工作的难度以及减少了冲突发生的可能性。