在上一篇POST中,简要的介绍了一下maven的特点,优势,安装。并建立了一个简单地Hello world工程。这一篇POST中,将主要会介绍一下Maven的一些约定。
Maven的项目文件是一个XML文件,叫做pom.xml,取Project Object Model的意思。对于项目的配置,都是修改POM.xml完成的。
一个简单地pom配置文件如下:
<projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>me.reyoung</groupId>
<artifactId>helloworld</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>helloworld</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
可以看到,pom.xml是个标准的XML文件。其中前三行说明这是一个maven格式的XML文件。在第5行到第8行说明了当前项目的一系列信息。而这些信息是Maven的座标信息。
Maven座标信息指的是每一个maven工程所独有的一个ID,而且,对于同一工程,不同的版本对应的座标不同。常见的座标包括有groupId:artifactId:version。其中:
使用这些座标,就可以定义出每一个Maven项目构建出来的结果了。比如,想找到图数据库Neo4J的座标。在maven的中心库搜索出的座标为 org.neo4j:neo4j:2.0.0-M03
在pom.xml文件的Dependencies中,描述了这个项目依赖的第三方库。而对于每个第三方库,
如果这个第三方库,可以在maven的中心库搜索到,那么直接在Dependencies中,添加这个Dependency的maven座标就可以了。
如果这个第三方库,不再maven的中心库中,那么可以有几种方法实现。这个在今后的博客中再讨论。
介绍完毕maven的项目配置文件pom.xml,下面说一下maven的项目结构。
大家可能很奇怪,对于maven的工程文件pom.xml做了很多描述这个项目的工作,但是并没有指定任何项目包含的文件。这就说到了maven的一个准则了。就是*约定大于编码*。也就是,在maven中,很多东西都是约定俗成的,如果你不想遵守这个约定而使用maven,就会变得复杂。
一个常见的maven项目目录结构为:
my-app
|-- pom.xml
|-- src
||-- main
||`-- java
| | `-- com
||`-- mycompany
| | `-- app
||`-- App.java
| `-- test
|`-- java
| `-- com
|`-- mycompany
| `-- app
|`-- AppTest.java
`-- target
|--*.jar
`-- *
其中,根目录里包括src目录和target目录。
这样,常见的maven项目目录格式,就是这样了。可见,maven系统中的所包括的代码,便是src目录下的所有源文件。
Maven包括一组命令。例如mvn compile就是编译,mvn test就是运行测试等。在maven这组命令中,基本上包括了软件开发从依赖解决到部署的全部内容。maven官方称这些为Build Life Cycle。而build life cycle包括:
同时,这些命令也可以组合使用。例如,我想要先删除之前编译的东西,然后再编译,然后测试,然后打包,然后安装到本地,就可以输入命令
mvn clean compile test package install
maven会按照顺序依次执行。。同时,maven命令先天的支持测试,所以对于自动化测试和持续集成,非常有帮助。可以用git的hook,监听代码版本库的变化,当test不过的时候,不予提交等等。
这篇介绍了一些maven中的基本概念。下一篇中会实际的写一个maven的工程,同时运用一下多模块的工程结构。做个预告。。