1,父模块的<packaging>必须为pom
2,<packaging>的默认值为jar
3,父模块要在pom里添加如下配置,来“组织”子模块;<module>的值,是父模块pom的相对目录名
注意:①父模块pom.xml的相对目录;②不是子模块的artifactId,而是子模块 的目录名
4,多模块deploy的时候,根据子模块的相互依赖关系整理一个build顺序,然后依次build,独立模块之间根据配置顺序build
5,当使用<artifactId>tomcat7-maven-plugin</artifactId> 热部署maven多模块项目,如果仅仅在父pom中配置热部署插件,
如果两个<module>都被打包成war,如果相互独立,则后加载的将会完全覆盖先加载的模块,如果有依赖关系,差异部
分将被保留,公共部分只保留主依赖方
6,所以在多模块项目中,使用Tomcat热部署,war模块的pom都应该继承或者配置,热部署插件。而此时,父pom中的插件
将会只作用于未配置插件的war模块,如果所有war模块都已配置,则父pom插件将失去作用
7,通过CMD中进入项目目录下,使用mvn tomcat:redeploy 命令来部署项目,①初次部署可以使用 deploy命令,所以统一使用 redeploy ②如果出现tomcat not to be found 部署异常,可以对应插件版本:mvn tomcat7:redeploy
8,插件配置<configuration> <path> 标签若设为<path>/ </path>,项目将会被部署到Tomcat\webaaps\ROOT下,并覆盖默认文件
9,子模块pom通过如下配置,来“继承”父模块,其中如果子模块的groupId或version没有显式配置,则默认继承父模块的
10,<dependencies> <dependency> 、的默认引用类型为jar,可以通过<type>改变引用类型
11,子pom 会直接继承 父pom <properties /> 中声明的属性
12,父pom 中仅仅使用<dependencies> <dependency>依赖的包,会被 子pom 直接继承(不需要显式依赖)
13,父pom 中仅仅使用<plugins> <plugin>依赖的插件,会被 子pom 直接继承(不需要显式依赖)
14,父pom中可以使用<dependecyManagement>和<pluginManagement>来统一管理jar包和插件pugin,不会被 子pom 直接继 承。子pom如果希望继承该包或插件,则需要显式依赖,同时像 <version /> <url /> 等配置项可以不被显式写出,默认从父 pom继承
15,mvn 命令对应着maven项目生命周期,顺序为compile、test、package、install、depoly,执行其中任一周期,都会把前面周 期 统一执行,可以通过配置跳过,例如:mvn install -DskipTests
16,maven项目打包和发布:本地没有就去下载,下载放在本地的仓库,加载本地仓库jar 打包成war 。远程发布,是先提交 commit 到本地,然后发布push到远程。
17,安全起见,项目修改后重新部署,建议增加clean周期,例如: maven clean redeploy
18,依赖具有传递性,maven项目会自动加载间接引入的依赖,也因此会造成某些jar包冲突,可以通过修改<scope>和增加 <exclusion>屏蔽间接依赖
19,<dependency /> 具有依赖传递性,而<plugin />不具有依赖传递性
20,本地的jar能够被发布到本地仓库,然后被本地项目依赖:
IDE工具发布。如 Myeclipse,
- mvn 命令行。
mvn install:install-file -Dfile=jar包的位置(参数一)
-DgroupId=groupId(参数二) -DartifactId=artifactId(参数三) -Dversion=version(参数四)
-Dpackaging=jar
- 然后把生成的pom <dependency /> 复制到本地项目的pom中,此时本地项目便可以依赖导入到本地仓库中的jar
21,pom <dependency /> 基础配置项与jar包路径的对应关系:
其中,<artifactId /> <version /> <type /> 共同组成 jar包名及部分路径:
/artifactId/version/artifactId-version.type。所以,由jar包分析pom依赖,建议倒序分解