本博客是在慕课网慕课网学习的笔记。
Maven覆盖了 编译,测试,运行,清理, 打包和部署整个项目的构建周期。它提供了一个仓库的概念,同意的帮我们管理项目所依赖的第三方的jar包,最大可能的避免由于环境的配置不同所产生的在你的电脑上可以运行在我这里就不可以运行的 这些令人沮丧的问题。
Maven 是基于项目对象模型(POM),可以通过一小段信息来管理代码的构建,报告 和文档的软件项目管理工具
mvn
就会调用这些脚本。bin/m2.conf
是一个配置文件 boot/plexus-classworlds-2.5.2.jar
是一个类加载器的框架,maven用它来加载自己的类库。conf
目录里面是配置文件比如 settings.xml
lib
目录下包含了maven的类库已经它依赖的第三方类库M2_HOME
变量,值为maven的安装目录。;%M2_HOME%\bin
mvn -v
验证是否安装配置成功Maven项目目录结构:
mvn -v
查看maven 版本mvn compile
编译mvn test
测试mvn package
打包 (compile, test 依此执行)mvn clean
删除targetmvn install
安装jar包到本地仓库中Maven提供了Archetype插件创建符合maven规定的目录骨架。Archetype创建maven项目骨架的方式如下两种:
mvn archetype:generate
按照提示进行选择。第一次使用这个命令会下载一些依赖。 mvn archetype:generate
-DGroupId=组织名,通常是:公司网址的反写+项目名
-DArtifactId=项目名-模块名
-DVersion=版本号
-DPackage=代码所存在的包名
坐标和构件:在Maven的世界中任何的依赖,插件,项目构建的输出都可以称之为构件,所有构建均通过坐标作为其唯一的标识。 GroupID, ArtifactId,Version就是坐标,相当于地址。
仓库: 分为本地仓库和远程的maven中央仓库
镜像仓库:
更改仓库的位置:不要放在C盘,如果重装系统什么的就会没有了。
取消注释并修改maven安装位置conf文件夹下的<localRepository>新的仓库路径</localRepository>
并且复制一份settings.xml到新的仓库路径
eclipse4.0以上,myeclipse中就不用单独安装maven插件。
在eclipse->preference->maven中可以设置settings.xml和本地仓库的位置。
完整的项目构建过程包括:
清理,编译,测试,打包,集成测试,验证,部署。Maven将其进行抽象,定义了三套相互独立 的生命周期:
Maven有很多插件,包括核心插件 install package等Maven Plugins
<project></project>
是pom的根元素,包含了pom的一些约束信息<modelVersion></modelVersion>
,是必须的。 指定了当前POM的版本<groupId>反写的公司网址+项目名</groupId>
<artifactId>项目名+模块名</artifactId>
<version>0.0.0snapshot</version>
第一个0表示大版本号,第二个0表示分支版本号,第三个0表示小版本号,snapshot表示快照,alpha表示内部测试,beta表示公测,Release稳定版本,GA正式发布<packaging></packaging>
打包方式,默认为jar,可以设置为war, zip, pom<name></name>
项目描述名,产生项目文档的时候会使用到。<url></url>
<description></description>
<developers></developers>
<licenses></licenses>
<organization></organization>
<dependencies>...<type></type></scope>test,provided...</scope><optional>true/false</optional><exclusions></exclusions></dependencies>
<dependencyManagement></dependencyManagement>
不会被执行,主要用于父模块中, 子模块继承用到的。<build><plugins><plugin>...</plugin>...</plugins></build>
构建时候可以用插件<parent></parent>
用于继承<modules></modules>
聚合运行多个maven项目三种classpath:
1. 编译
2. 测试
3. 运行
依赖范围是用来控制依赖于三种class path的关系的。
6种可用的 Maven Scop
nage依赖bge, shanji依赖bge, 所以shanji依赖nange和bge. 所以依赖有传递性。 当然也可以通过<exclutions><exclution></exclution></exclutions>
来去除依赖。
可以在settings.xml中的profiles profile里面设置jdk的版本,就不用每次创建项目都要修改 jdk, 因为maven默认的jdk版本是1.5
两条原则:
短路优先。比如下面你例子,A依赖的是V2的X jar:
A 依赖 B, B依赖 C, C 依赖 X(JAR V1)
A 依赖 D, D 依赖 X(JAR V2)
新建一个项目用来聚合,并修改pom文件如下
新建一个项目,POM如下
在需要继承的项目的pom中引入父pom