maven学习-初窥门径
最近在一个公司实习,由于刚出校门对公司开发流程还是不太清楚。对Maven知之甚少,最近我就在恶补Maven。
Maven定义
Maven是一个项目管理工具,它包含了一个项目对象模型(ProjectObjectModel),一组标准集合,一个项目生命周期(ProjectLifecycle),一个依赖管理系统(DependencyManagementSystem),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后Maven可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。
在没有自定义的情况下,源代码假定是在${basedir}/src/main/java,资源文件假定是在${basedir}/src/main/resources。测试代码假定是在${basedir}/src/test。项目假定会产生一个JAR文件。Maven假定你想要把编译好的字节码放到${basedir}/target/classes并且在${basedir}/target创建一个可分发的JAR文件。虽然这看起来无关紧要,但是想想大部分基于Ant的构建必须为每个子项目定义这些目录。Maven对约定优于配置的应用不仅仅是简单的目录位置,Maven的核心插件使用了一组通用的约定,以用来编译源代码,打包可分发的构件,生成web站点,还有许多其他的过程。
Maven插件的全局性重用
Maven的核心,解析一些XML文档,管理生命周期与插件。Maven被设计成将主要的职责委派给一组Maven插件,这些插件可以影响Maven生命周期,提供对目标的访问。绝大多数Maven的动作发生于Maven插件的目标,如编译源码,打包二进制代码,发布站点和其它构建任务。从Apache下载的Maven不知道如何打包WAR文件,也不知道如何运行单元测试,Maven大部分的智能是由插件实现的,而插件从Maven仓库获得。第一次你用全新的Maven安装运行诸如mvninstall命令的时候,它会从中央Maven仓库下载大部分核心Maven插件。这不仅仅是一个最小化Maven分发包大小的技巧,这种方式更能让你升级插件以给你项目的构建提高能力。Maven从远程仓库获取依赖和插件的这一事实允许了构建逻辑的全局性重用。
依赖管理
由于项目是根据一个包含组标识符,构件标识符和版本的唯一的坐标定义的。项目间可以使用这些坐标来声明依赖
远程仓库
和项目依赖相关的,我们可以使用定义在项目对象模型(POM)中的坐标来创建Maven构件的仓库。
Ant和Maven的区别
ApacheAnt
Ant没有正式的约定如一个一般项目的目录结构,你必须明确的告诉Ant哪里去找源代码,哪里放置输出。随着时间的推移,非正式的约定出现了,但是它们还没有在产品中模式化。
Ant是程序化的,你必须明确的告诉Ant做什么,什么时候做。你必须告诉它去编译,然后复制,然后压缩。
Ant没有生命周期,你必须定义目标和目标之间的依赖。你必须手工为每个目标附上一个任务序列。
ApacheMaven
Maven拥有约定,因为你遵循了约定,它已经知道你的源代码在哪里。它把字节码放到target/classes,然后在target生成一个JAR文件。
Maven是声明式的。你需要做的只是创建一个pom.xml文件然后将源代码放到默认的目录。Maven会帮你处理其它的事情。
Maven有一个生命周期,当你运行mvninstall的时候被调用。这条命令告诉Maven执行一系列的有序的步骤,直到到达你指定的生命周期。遍历生命周期旅途中的一个影响就是,Maven运行了许多默认的插件目标,这些目标完成了像编译和创建一个JAR文件这样的工作。
Maven以插件的形式为一些一般的项目任务提供了内置的智能。如果你想要编写运行单元测试,你需要做的只是编写测试然后放到${basedir}/src/test/java,添加一个对于TestNG或者JUnit的测试范围依赖,然后运行mvntest。如果你想要部署一个web应用而非JAR,你需要做的是改变你的项目类型为war,然后把你文档根目录置为${basedir}/src/main/webapp。当然,你可以用Ant做这些事情,但是你将需要从零开始写这些指令。使用Ant,你首先需要确定JUnitJAR文件应该放在哪里,然后你需要创建一个包含这个JUnitJAR文件的classpath,然后告诉Ant它应该从哪里去找测试源代码,编写一个目标来编译测试源代码为字节码,使用JUnit来执行单元测试
简单使用语句
mvn -v 查看版本
compile 编译
test 测试
package 打包
clean 清楚target
install 安装jar包到本地仓库中
自动创建目录骨架
archetype插件用于创建符合maven规定的目录骨架创建目录有两种方式
方式一:archetype:generate按照提示进行选择
方式二:archetype:generate-DgroupId=组织名,公司网址的反写+项目名
-DartifactId=项目名-模块名
-Dversion=版本号
-Dpackage=代码所存在的包名
其他知识点
坐标
构件
仓库 分为本地仓库和远程仓库
镜像仓库
clean清理项目
pre-clean执行清理前的工作
clean清理上一次构建生成的所有文件
post-clean执行清理后的文件
site生成项目站点
pre-site在生成项目站点前要完成的工作
site生成项目的站点文档
post-site在生成项目站点后要完成的工作
site-deploy发布生成的站点到服务器上
依赖范围
依赖冲突
依赖传递
聚合和继承,其他知识点以后在详细介绍。。
总结
以上就是本文关于maven学习-初窥门径的全部内容,对maven作了简要介绍,有什么不对的地方欢迎留言指出,小编也可以学习学习。感兴趣的朋友可以继续参阅本站:使用maven运行JavaMain的三种方法解析、Java利用future及时获取多线程运行结果等,感谢阅读。希望对大家有所帮助。