maven是一个项目构建和管理工具。它可以方便的进行代码编译、依赖管理和项目发布等。
一句话概括其原理:采用远程仓库和本地仓库以及核心的pom.xml方式,其中pom.xml中定义的jar文件从远程仓库下载到本地仓库,同一版本的jar只需下载一次。
配置本地仓库:
=>在maven的文件夹下的conf子目录的下:
设置仓库位置
提示:建议先将原setting文件拷贝一份,比如我就拷贝为settings_home.xml,以便之后使用。
pom.xml文件解析:
<groupId>---项目名称
<artifactId>---模块名称(建议用“项目名_模块名”设置)
<version>---版本
<dependencies>
<dependency>......</dependency>
</dependencies>---依赖的包们
<dependency>......</dependency>中
1、需要配置<groupId>、<artifactId>、<version>这三项(必须要配置的),来确保唯一性。
2、配置<scope>属性来声明该依赖会在何时用到(有时编译的时候需要而生成war包不需要)
(1)、<scope>test</scope>-----编译有效,在编译、打包会用此依赖。
(1)、<scope>compile</scope>-----测试、编译有效,编译、打包不会用此依赖。
(1)、<scope>provided</scope>-----测试范围有效,生成war包不会用此依赖(比如servlet-api)。
(1)、<scope>runtime</scope>-----运行有效,编译不依赖。
一个模块的基础结构:
源代码:src/main/java
源码资源文件:src/main/resources
测试代码:src/test/java
测试资源文件:src/test/resources
注意:这个结构可以以maven方式导入项目中哦。
maven中的聚合:
在实际开发中,如何将多个模块进行一次编译、打包、发布呢?
需要在一个聚合项目(普通项目,只做聚合)中进行,只需要在聚合项目的pom.xml文件中加入
<packing>pom</packing>
<modules>
<module>../user-core</module>
<module>....../......</module>
</modules>
***若<packing>类型为pom,<module>的值以pom为主目录的相对路径哦
maven中的继承:
类似于java的继承概念,解决各个模块中都依赖同样的jar包,故提取成公共模块。
在一个父模块(普通项目,只做继承)里的maven的pom文件中定义了相关的常量、依赖、插件等。
在子模块的pom.xml文件中配置<parent>
<parent><groupId>XXXXXX</groupId>
<artifactId>user-parent</artifactId>
<version>0.1.1-SNAPSHOT</version>
<relativePath>../user-parent/pom.xml</relativePath> //父模块路径
</parent>
那么问题来了,如果每个子模块有继承父模块的依赖,有些不需要肿么办呢?
解决方式是:将父模块的依赖<dependencies>用<dependencyManagement>包裹
这样就可以在子模块中选择需要的依赖了,如果子模块需要该依赖,只需要在<dependency>.
<groupId>---项目名称(同父模块的)
<artifactId>---模块名称(同父模块的)
这两项,与父模块形成一对一关系即可。
不知道我简要概述的是否明白,还有eclipse部署maven、maven项目的部署发布等详细问题,可参考以下地址
http://download.csdn.net/detail/u013938465/8996365