(P47)需求用例模板
(P67)在 项目B中可以使用
元素指定X、Y模块是可选依赖,此时X、Y模块只对当前项目B影响,项目A依赖于项目B的时候X、Y模块将不会被传递;当项目A依赖于项目B的时候,如果实际使用中需要使用X模块则需要在项目A中显式声明X模块依赖,选择使用Y模块时同理。(请留意下一点,不建议使用可选依赖) (P68)在理想的情况下,是不应该使用可选依赖的,使用可选依赖的原因是某一个项目实现了多个特性,在面向对象设计中,应遵循单一职责性原则。在上例中,更好的做法是为X和Y分别创建一个Maven项目,基于同样的groupId分配不同的artifactId,如com.juvenxu.mvnbook:project-b-x和com.juvenxu.mvnbook:project-b-y。
(P79)修改M2_HOME/conf/settings.xml文件可以修改maven的全局配置项,但是建议把该文件复制到
/.m2目录下再进行修改,因为如果直接改maven安装目录下的settings.xml文件将会对本机的所有用户影响,而修改/.m2/settings.xml则可以控制只对当前用户生效,避免对其他用户造成不必要的干扰。(个人认为windows系统比较少存在多用户的情况,直接修改M2_HOME/conf/settings.xml也无妨)(P83)【远程仓库调用】大部分远程仓库无需认证就可以访问,但有时候出于安全方面的考虑,我们需要提供认证信息才能访问一些远程数据库。配置认证信息和配置仓库信息不同,仓库信息可以直接配置在POM文件中,但是认证信息必须匹配置在settings.xml文件中。这是因为POM往往被提交到代码仓库中供所有成员访问,而settings.xml一般只放在本机,相对更安全。
setttings.xml中通过配置认证信息,其中 必须与POM中repository元素的id完全一致。 1
2
3
4
5
6
7
8
9<settings>
...
<servers>
<id>my-proj</id>
<username>repo-user</username>
<password>repo-pwd</password>
<servers>
...
</settings>(P86)Maven的快照机制
(P90)由于镜像仓库完全屏蔽了被镜像仓库,当镜像仓库不稳定或者停止服务的时候,Maven仍将无法访问被镜像仓库,因而无法下载构件
(P117)一般来说,一个项目的子模块都应该使用同样的groupId,如果它们一起开发和发布,换应该使用同样的version,此外,它们的artifactId还应该使用一致的前缀,以方便同其他项目区分。
(P118)例:account-persist的Java代码位于默认的src/mainjava目录,包含Account.java、AccountPersistServiceImpl.java和AccountPersistException.java四个文件,它们的包名都是com.juvenxu.mvnbook.accoount.persist,该包名与account-persist的groupId com.juvenxu.mvnbook.account及artifactId account-persist对应。
(P126)聚合模块与其他模块的目录结构并非一定要是夫子关系。
- 聚合模块的父子目录结构
- 聚合模块的平行目录结构
如果使用平行目录结构,聚合模块的POM也需要做响应的修改,以指向正确的模块目录:1
2
3
4<modules>
<module>../account-email</module>
<module>../account-persist</module>
</modules>
- 聚合模块的父子目录结构
(P128)作为父模块,其打包类型必须是pom
由于父模块只为了帮助消除配置的重复,因此它本身不包含除POM之外的项目文件,也就不需要src/main/java/之类的文件夹了(P131)dependencyManagement元素的使用
(P137)多模块Maven项目中的聚合与继承其实是两个概念,其目的完全是不同的。前者主要是为了方便快速构建项目,后者主要是为了消除重复配置。
在现有的实际项目中,往往会出现一个POM既是聚合POM,又是父POM,这么做主要是为了方便。(P145)模块间的依赖关系会将反应堆构成一个有向非循环图,各个模块是该图的节点,依赖关系构成有向边。这个图不允许出现循环,因此,当出现模块A依赖于模块B,而B又依赖于A的情况时,Maven就会报错。
(P145)裁剪反应堆
(P153)Nexus的仓库列表
(P195)Hudson(jenkins)的使用
(P231)web项目依赖于servlet-api和jsp-api这两个包,它们为servlet和jsp的编译提供支持。需要注意,这两个依赖的范围是provided,表示它们最终不会被打包至war文件中,这是因为几乎所有Web容器都会提供这两个类库,如果war包中重复出现,就会导致潜在的依赖冲突问题。
(P231)配置
可以指定war包名称 (P246)Maven的版本号定义约定如下:
<主版本>.<次版本>.<增量版本>-<里程碑版本>
如1.3.4-beta-2,1表示该版本是第一个重大版本;3表示这是基于重大版本的第三个次要版本;4表示该次要版本的第四个增量;beta-2表示该增量的某一次里程碑(P263)profile