本文共 3836 字,大约阅读时间需要 12 分钟。
首先要安装好自己电脑的Maven环境,我的是ubuntu 16.04+maven3.5.0
什么是Maven?
当你第一眼 看见Maven,你所见的Maven可能是不同的,但是总而言之,Maven是一种尝试将模式运用到工程的基础构建,并提供最佳构建实践过程的清晰过程来提升(工程的)理解和生产率。Maven实际上是一个工程管理和理解工具,因此提供了一种方法来管理:
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都有的关键信息:
创建的文件夹结构如下:
你可以看到,从原型创建的工程有一个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文件了。
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。