博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Maven学习系列1-Get Started
阅读量:2442 次
发布时间:2019-05-10

本文共 3836 字,大约阅读时间需要 12 分钟。

首先要安装好自己电脑的Maven环境,我的是ubuntu 16.04+maven3.5.0

什么是Maven?

当你第一眼 看见Maven,你所见的Maven可能是不同的,但是总而言之,Maven是一种尝试将模式运用到工程的基础构建,并提供最佳构建实践过程的清晰过程来提升(工程的)理解和生产率。Maven实际上是一个工程管理和理解工具,因此提供了一种方法来管理:

  • Builds(构建)
  • Documentation(文档)
  • Reporting(反馈)
  • Dependencies(依赖)
  • SCMs(一种产品管理)
  • Releases(发布)
  • Distribution(发行)
如果想要了解更多Maven的背景资料,请访问and.

Maven怎样有益于我的开发过程?

Maven通过使用标准的约定和实践来加速你的开发周期同时帮助你获得更高的成功率。

怎样设置Maven?

默认的Maven设置通常是很有效的,但是当你需要改变缓存的位置或者使用HTTP代理,你需要创建配置。参见

怎样制作第一个Maven工程?

为了创建我们的第一个工程,我们将会使用到Maven的原型机制。一个原型被定义为一个 或者是其他同类事物制作使用的模板。在Maven中,原型是一种工程模板,这种模板结合了用户的输入来产生定制了用户的需求的可工作的Maven工程。我们接下来展示原型机制怎样工作的,如果你想深入了解原型,参见。

继续创建你的第一个工程!为了创建你的第一个Maven工程,在命令行中执行以下命令:

mvn -B archetype:generate \  -DarchetypeGroupId=org.apache.maven.archetypes \  -DgroupId=com.mycompany.app \  -DartifactId=my-app

我在家目录下创建了一个文件夹叫做MavenStudy来存储工程,第一次创建时需要联网,Maven会在仓库中下载一些相关的文件,存储在默认或者设置的缓存位置:

会在当前执行命令的目录生成一个文件夹名叫my_app,

文件夹下面有一个叫做pom.xml的文件:

pom.xml文件包含了工程的Project Object Model (POM工程对象模型)。POM是Maven工作的最小单元。记住,这很关键,因为所有东西都围绕着项目的原因,Maven天生是项目式的.简单来说,POM包含了所有你的工程的信息,实际上,寻找有关你的工程的信息是一站式的(都在pom文件中)。理解POM是十分关键的,新用户最好参看

这是十分简单的POM,但是仍然包含了所有POM都有的关键信息:

  • project 这是所有Maven pom.xml文件都有的顶级元素。
  • modelVersion 这个元素指出这个POM使用的是哪个版本的对象模型。这个模型版本的改变并不频繁,但是为了保证使用时的稳定性,当Maven开发者断定它需要被改变时,它是强制性的。
  • groupId 这个元素指出了创建这个工程的组织或者组的唯一标示符。groupId是标示一个工程的一个关键标示符之一,它一般是基于你的组织的全域名的。比如:org.apache.maven.plugins是指定给所有Maven插件的。
  • artifactId 这个元素指出了工程创建的基于主构件的唯一名称。一个工程的主构件通常是一个JAR文件。副构件比如源bundles同样使用构件ID作为他们最终名称的一部分。一个典型的构件由Maven从<artifactId构件名>-<version版本>.<extension拓展>的格式创建(比如myapp-1.0.jar)。
  • packaging 这个元素指出了这个构件(JAR,WAR,EAR等等)使用的打包类型。这不仅仅意味着构件产生JAR,WAR或者EAR,同样指出了一个特定的构件过程的一部分生命周期。(生命周期是我们深入处理引导的主题之一。现在,记住指出工程的打包类型可以在自定义构件生命周期参一脚就好了。)默认的打包类型是JAR所以在大多数时候不需要重新指定。
  • version 这个元素指出了工程产生的构件的版本。Maven在版本管理上很有帮助,你会经常在版本中看到SNAPSHOT指示符的,它表示一个工程处于开发状态。我们将会在这个手册中深入讨论的使用和它的工作原理的。
  • name 这个元素指出工程的名字。这是在Maven自动产生文档时经常用到的。
  • url 这个元素指出工程的网站在哪里可以找到。这是在Maven自动产生文档时经常用到的。
  • description 这个元素提供工程的基本描述。这是在Maven自动产生文档时经常用到的。
想要知道完整可用的元素引用,参见 。

创建的文件夹结构如下:

你可以看到,从原型创建的工程有一个POM,一个源代码树,一个测试的源代码树。(这是一个标准的Maven工程结构,源代码重定向到${basedir}/src/main/java,测试源代码重定向到/src/test/java,其中${basedir}是包含pom.xml的文件夹。

怎样编译程序源代码?

定位到包含pom.xml文件,由archetype:generate创建的目录,执行以下命令:

mvn compile

同样可以运行

mvn test
将会运行单元测试:

有几件事值得注意:

 ·这时Maven下载了更多的插件和依赖。这些是执行测试必须的依赖和插件。(之后再次编译将不会再重新下载,因为本地已经有了这些依赖和插件。)

·在编译和运行测试之前,Maven先编译了主程序。(其实所有的class文件都是最新的,因为我们不需要在上一次编译之后修改任何东西。)

如果你仅仅是想要编译你的测试文件而不运行,你可以执行 mvn test-compile

怎样创建JAR并且在本地仓库中安装?

制作JAR文件可以直接执行下面的命令:

mvn package
如果你有好好看上面的工程POM,你会注意到packaging元素被设置为jar。这就是Maven怎样从上面的命令知道要产生JAR文件的方式。(我们之后会讨论这个问题)现在你可以到${basedir}/target目录查看你产生的JAR文件了。

现在你将会安装你生成的构件(JAR文件)到你的本地仓库(默认位置是:${user.home}/.m2/repository)更多信息可以参看: ,现在执行以下命令:

mvn install

注意第一张截图中最后的surefire插件(执行了测试的那个)按照特定的命名规则寻找测试文件中的测试用例。默认的包含测试的测试文件应该是:

·**/*Test.java

·**/Test*.java

·**/*TestCase.java

默认不包含测试的测试文件:

·**/Abstract*Test.java

·**/Abstract*TestCase.java

你已经完成了设置,编译,测试,打包和安装一个典型Maven工程的过程。这已经是Maven工程将要做的大部分事情了。如果你有注意到的话,到现在为止这些过程都是由一个18行的文件驱动的,或者说是工程模型或者POM。如果你想用Ant构建文件来完成相同的任务的话,你需要2倍的文件来做,我们才刚开始啊!从现在的POM文件你还可以获得更多的Maven功能,而用Ant达到这些额外的功能则需要做更多的工作,而且往往容易出错。

那么究竟有些什么额外的功能呢?其实从我们上面创建的POM当中有很多Maven插件就可以工作了。我们将提到一个很有价值的Maven功能:不需要对你的POM做任何额外的功能就可以产生一个工程的网站!你可能想要定制你自己的工程网站,但是如果你缺乏时间的话,你可以执行下面的命令来产生一个提供工程的基本信息的网站:

mvn site
像这样独立的命令还有很多,比如:

mvn clean
这将会移除target文件夹和执行这条命令之前的所有的编译数据,清理工程。

可能你要创建一个工程的IntelliJ IDEA描述符:

mvn idea:idea
这个命令同样可以在先前的IDEA工程上运行,将会更新工程设置而不是重新创建。

如果你使用Eclipse IDE,请调用:

mvn eclipse:eclipse
小提示:有些Maven1.0的命令仍然可用,比如jar:jar,但是它们可能不会像你期待的那样工作了。不久,jar:jar将不会再重新编译源文件,而是会仅仅以为所有的事情的都已经做好,然后创建一个JAR文件到target/classes目录下面。
什么是SNAPSHOT版本?

注意到pom.xml文件中的version标签有这样的后缀:-SNAPSHOT。

SNAPSHOT值意味着开发中的最新版本代码,不保证代码是稳定并且不会继续修改的。相对的,正式版本的代码将会没有这个后缀而且也不会被改动。

换句话说,SNAPSHOT版本是最终的“release正式”版本之前的“development开发”版本。SHAPSHOT比当前正式版本更旧。

在正式释出的过程中,一个像x.y-SNAPSHOT的版本号将会变为x.y。释出的过程同样可能会提升开发版本到x.(y+1)-SNAPSHOT。比如版本1.0-SNAPSHOT被释出为1.0,而新新开发版本是1.1-SNAPSHOT。

你可能感兴趣的文章
决策树
查看>>
CGI
查看>>
csv文件
查看>>
XML CDATA
查看>>
转义字符
查看>>
TIOBE开发语言排行榜
查看>>
分区和卷
查看>>
换行符
查看>>
O2O
查看>>
想起一句话:”多加一层,就可以把问题解决了“
查看>>
PostgreSQL Page页结构解析(7)- B-Tree索引存储结构#3
查看>>
企业文化和价值观
查看>>
基础存储知识
查看>>
PostgreSQL 源码解读(37)- 查询语句#22(查询优化-grouping_plan...
查看>>
PostgreSQL 源码解读(44)- 查询语句#29(等价类相关数据结构)
查看>>
PostgreSQL 源码解读(48)- 查询语句#33(query_planner函数#9)
查看>>
PostgreSQL 源码解读(45)- 查询语句#30(query_planner函数#6)
查看>>
PostgreSQL 源码解读(47)- 查询语句#32(query_planner函数#8)
查看>>
PostgreSQL 源码解读(17)- 查询语句#2(查询优化基础)
查看>>
Windows Vista内置趣味实用工具大搜罗(转)
查看>>