通过之前的一篇,大家应该都配置好了MAVEN,那么MAVEN到底有什么用呢,今天,来和大家分享一下如何用MAVEN去构建你的程序。
------------------------------------------------------------------------------------------------------------------------------
首先让我们再次加深一下对于MAVEN的理解,就像我一样,许多的新手小伙伴可能觉得有了IDE,对于程序的管理还挺方便啊,为什么需要MAVEN,包括Git,为什么需要这些看起来很复杂的东西呢?关于这个问题,不仅仅是随着软件的开发、版本的更新,软件的大小越来越大的缘故,对此,我把我和我们头儿聊天的认识零碎地写一写。
这里我们谈论企业级的应用程序(和Naive我一样没有经历过企业级应用的萌新们只要觉得这样的软件的数量级跟我们曾经的小应用比起来不可想象就好了:-D),这一类的应用程序往往在可预见的将来会变得十分庞大(随着数据量的不断增大),但是在起始阶段,针对庞大数量级设计的程序结构和许多元素通常会使得事情变得十分复杂,因此,在软件开发的不同时期,采用不同的程序结构将会是一个很好的选择,但是(敲黑板),并非毫无关联地改变结构,为了开发成本的降低,初期对于程序结构的设计将会十分重要,要考虑到今后的拓展,即是,对于开始的程序必须“麻雀虽小,五脏俱全”。所以,对于版本的控制,对于程序的架构,细化到对于依赖项的管理,都变得十分繁琐,因此,MAVEN将解放我们的双手。
对MAVEN这类工具的必要性有了大概了解以后,我们就可以明白如何用它来构建我们的程序了。打开IDE,创建project,这里我们不选择MAVEN提供的模板,点击next,
这边我们看到了GroupId和ArtifactId两栏,GroupId是指项目编写人员的信息,ArtifactId则是项目本身的信息,而下面的Version是版本信息,这里的snapshot是指当前版本为不稳定版本。大家一定要记住这几个概念,这实际上是在设置我们的POM.XML文件,这是一个非常重要的概念,一个POM对应了一个项目,这里,POM的出现使得项目对象模型和实际代码进行了分离,我们称之为解耦或正交性,这在很大程度上避免了java代码和POM代码之间的互相影响,比如当项目需要升级版本时,只需要修改POM,不需要修改java代码,而在POM稳定后,日常java开发工作基本不会涉及POM的修改。【改句摘自许晓斌所著的MAVEN实战一书】关于POM我们后面还会展开来解释,不明白的小伙伴无需担心。
点击NEXT以后这里的name是project的name,是方便项目组内的人员相互交流使用,点击finish创建成功。
这时候我们注意右下角,点击Enable Auto-Import可以导入所需要的基础的jar包,至此,project的创建告一段落。
此时我们打开我们的project文件夹,将会看到一个pom.xml文件,下面我们来详细解读一下,
代码的首行是xml头,指定了该xml文档的版本和编码方式,project是所有pom.xml的根元素,声明了一些pom相关的命名空间和xsd元素,这些属性可以让第三方工具(如Ide的 xml编辑器)帮助我们快速编辑POM。根元素下的第一个子元素modelVersion指定了当前pom模型的版本,对于MAVEN2和MAVEN3来说都是4.0.0。下面就是我们重点需要关注的,可以看到熟悉的GroupId和ArtifactId以及version,这三者共同唯一标识了项目的基本坐标。POM文件是可以在IDE中直接修改的,后面我们也将会回头来对pom进行修改。这里提一提,POM文件是对project的配置,而前一篇的settings是对全局MAVEN的配置。
接下来我们编辑我们的HelloMAVEN,默认时MAVEN假设主代码在src/main/java下,我们遵循该约定在该目录下创建HelloMAVEN,并编写代码如下:
/**
* Created by Cambridgewoo on 2017/2/24.
*/
public class HelloMaven {
public String sayHello(){
return "Hello Maven";
}
public static void main(String[] args){
System.out.println(new HelloMaven().sayHello());
}
}
编写完毕后我们在根目录下用Maven编译,运行命令mvn clean compile,我们得到下面的输出:
下面我们编写一个测试单元并让maven执行自动化测试。测试用例通常置于src/test/java下,我们创建HelloMavenTest并编写代码如下:此时已经看不到报错,但是大家在此处可能会看到缺少jar包的错误,这是因为我们需要依赖到junit(junit是单元测试标准)包,但是project当中并未添加这个依赖,因此我们需要去修改pom配置,让maven管理我们的依赖。打开POM.XML,添加如下部分:
我们看到dependencies中间添加了dependency,这就是我们所需要依赖的jar,同样的jar由groupId、artifactId以及version唯一决定,下面的scope表示依赖的适用范围,这里值为test表示仅适用于test,如果没有scope则表示使用所有范围。这里仅添加了一个dependency,显然我们是可以添加更多的dependency的,这里不在举例。顺带提一提maven对依赖管理的工作方式,当我们在pom中添加了依赖,maven会先搜索本地仓库,一般是在.m2/repository/可以看到,在本地仓库搜索无果的情况下会根据setting中的配置搜索,最终会在其中央仓库中获得依赖并加载到本地仓库中去。这里可能有小伙伴会问,添加依赖何须maven?手动就是了,但事实上一个jar可能会依赖其他N多jar,我们只有手动一个个去搜索补齐,大量浪费了我们的时间和精力,但是maven智能地做了这一切,我们只需添加所需jar,其余的jar会由maven自动补齐。很多小伙伴这里可能没有体会,只需记住这是maven的一个强大功能即可。
保存pom.xml后我们在右下角同样会看到需要imported的提示,选择enable auto-imported即可。
最后我们在控制台输入mvn clean test执行test可以看到我们的第一个maven程序就算是成功完成啦。
后续还有打包和运行,相对比较简单,这里请小伙伴们自行Google百度~