maven使用.02.一些概念
在上一篇POST中,简要的介绍了一下maven的特点,优势,安装。并建立了一个简单地Hello world工程。这一篇POST中,将主要会介绍一下Maven的一些约定。
pom.xml文件
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座标信息指的是每一个maven工程所独有的一个ID,而且,对于同一工程,不同的版本对应的座标不同。常见的座标包括有groupId:artifactId:version。其中:
- groupId: 基本上这个属性描述的是谁或者是哪个组织写的这个项目
- artifactId: 构建的ID,表示这个项目在那个组织中的名字
- version: 项目的版本。这里以SNAPSHOT结尾,表示该项目还是一个正在开发中的快照版本。
- packaging: 该项目的打包方式,例如
- 对于桌面应用和程序库,打包成jar
- 对于网络应用打包成war
- 对于maven的扩展或者子项目等等在maven系统中用的项目,打包成pom
使用这些座标,就可以定义出每一个Maven项目构建出来的结果了。比如,想找到图数据库Neo4J的座标。在maven的中心库搜索出的座标为 org.neo4j:neo4j:2.0.0-M03
Dependencies 信息
在pom.xml文件的Dependencies中,描述了这个项目依赖的第三方库。而对于每个第三方库,
如果这个第三方库,可以在maven的中心库搜索到,那么直接在Dependencies中,添加这个Dependency的maven座标就可以了。
如果这个第三方库,不再maven的中心库中,那么可以有几种方法实现。这个在今后的博客中再讨论。
maven的项目结构
介绍完毕maven的项目配置文件pom.xml,下面说一下maven的项目结构。
大家可能很奇怪,对于maven的工程文件pom.xml做了很多描述这个项目的工作,但是并没有指定任何项目包含的文件。这就说到了maven的一个准则了。就是*约定大于编码*。也就是,在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目录。
- src目录为源代码目录,包括该项目所有的代码或者资源文件。
- src下的main目录,包括所有的正式代码。
- 代码子目录。 而在这个目录下的java子目录,表示该程序所有的java代码。其他语言的代码,均为其他语言的目录,例如scala目录等。
- 资源子目录。 包括resources目录,这个目录在编译成jar的时候,会打包进入jar。当然还有其他的资源,例如web资源等。
- src下的test目录,包括所有测试运行时的代码。其子目录结构和src/main中的一样。
- src下的main目录,包括所有的正式代码。
- target目录为编译的结果目录。包括编译后的class文件,jar文件,也包括生成的测试报告。
这样,常见的maven项目目录格式,就是这样了。可见,maven系统中的所包括的代码,便是src目录下的所有源文件。
Maven的命令或者叫做生命周期(Life Cycle)
Maven包括一组命令。例如mvn compile就是编译,mvn test就是运行测试等。在maven这组命令中,基本上包括了软件开发从依赖解决到部署的全部内容。maven官方称这些为Build Life Cycle。而build life cycle包括:
- validate - 验证项目是否正确,所有的依赖能否达到
- compile - 编译源代码
- test - 测试代码
- package - 将编译好的源代码打包
- verify - 验证这个包是不是正确
- install - 将这个构建安装到本地的maven库中
- deploy - 将这个构建上传到远端的maven库中
同时,这些命令也可以组合使用。例如,我想要先删除之前编译的东西,然后再编译,然后测试,然后打包,然后安装到本地,就可以输入命令
mvn clean compile test package install
maven会按照顺序依次执行。。同时,maven命令先天的支持测试,所以对于自动化测试和持续集成,非常有帮助。可以用git的hook,监听代码版本库的变化,当test不过的时候,不予提交等等。
这篇介绍了一些maven中的基本概念。下一篇中会实际的写一个maven的工程,同时运用一下多模块的工程结构。做个预告。。
引用/参考
maven使用.02.一些概念的更多相关文章
- 【Java EE 学习 82 下】【MAVEN整合Eclipse】【MAVEN的一些高级概念】
一.MAVEN整合Eclipse MAVEN是非常优秀,但是总是要开命令行敲命令是比较不爽的,我们已经习惯了使用IDE,所以还有一种将MAVEN整合到Eclipse的方法. 详情查看:http://w ...
- maven第二天——重要概念与其它操作
一.在eclipse中建立工程 在day01中我们搭建了eclipse的maven环境,接下来我们开始建立maven项目 1.在eclipse中建立JAVA工程 file->new->ma ...
- maven用途、核心概念、用法、常用参数和命令、扩展
设置问题解决. http://trinea.iteye.com/blog/1290898 本文由浅入深,主要介绍maven的用途.核心概念(Pom.Repositories.Artifact.Buil ...
- Ant,Maven与Gradle的概念的理解
转载地址:http://www.jianshu.com/p/cd8fe9b16369# 我们还是以AndroidStudio 2.1.1为例来讲. 用AndroidStudio就逃不开跟Gradle打 ...
- Maven 生命周期的概念(指令默认顺序执行)
生命周期的概念 IDEA中使用maven构建项目都集中放到了窗口右侧"Maven Projects"中,点击该区域可以直观的看到,maven中几个常用指令都归类为LifeCycle ...
- Maven笔记之核心概念及常用命令
Maven的核心概念 Maven是一款服务于java平台的自动化构建工具. 自动化构建工具还有:make->ant->maven->gradle 1.约定的目录 2.P ...
- maven实战(02)_坐标详解
(一) 何为mave坐标 maven的世界中拥有数量非常巨大的构件,也就是平时用的一些jar,war等文件. maven定义了这样一组规则: 世界上任何一个构件都可以使用Maven坐标唯一标志,ma ...
- RecyclerView 介绍 02 – 重要概念
几个概念 RecyclerView是一个ViewGroup: LayoutManager控制RecyclerView的ChildView的布局显示,childview由Recycler提供以及管理: ...
- javascript高级编程笔记02(基本概念)
ParseInt()函数: 由于Number函数在转换字符串时比较复杂而且不合理,我们常常转换字符串都用parseInt函数, Parseint函数规则: 忽略字符串前面的空格,直到找到第一个非空格字 ...
随机推荐
- eclipse中使用maven插件的时候,运行run as maven build/clean的时候报错
-Dmaven.multiModuleProjectDirectory system propery is not set. Check $M2_HOME environment variable a ...
- 基于visual Studio2013解决C语言竞赛题之0610冒泡排序函数
题目
- [WPF源代码]QQ空间相册下载工具
放一个WPF源代码,源代码地址 http://download.csdn.net/detail/witch_soya/6195987 代码没多少技术含量,就是用WPF做的一个QQ空间相册下载工具,效果 ...
- 1030 - Image Is Everything
Your new company is building a robot that can hold small lightweight objects. The robot will have th ...
- fullcalendar日历控件知识点集合
1.基本的语法: 首先,fullcalendar和JQUERY一样,以面向对象的方式来组织代码.当然,这里的面向对象不过指能够把整个fullcalendar理解为一个类,这个类里包含有非常多的属性.方 ...
- C++辛格尔顿
设计模式是编程的焦点.经常在面试时进行审查,Singleton模式是最简单的.最常见的.大部分的主模式.所以大部分的采访是测试考试的Singleton设计模式. 以下我们就来看看单例模式怎样实现(C+ ...
- PHP中遍历stdclass object 及 json 总结[中国航天神舟十号以json形式向地面返回数据]
$test=Array ( [0] => stdClass Object ( [tags] => 最快的车,Bloodhound,SSC [id] => 48326888 11 从网 ...
- “add measurements”(添加度量)菜单问题
- Swift - 获取屏幕点击坐标下所有对象(SpriteKit游戏开发)
对于场景内对象元件的点击响应,我们可以在场景的touchesBegan()方法中内统一处理. SKScene中touchesBegan()是响应屏幕点击的方法,在这里面我们可以先获取点击位置下所有的对 ...
- 安装ipvsadm报错
server环境: [vagrant@localhost download]$ uname -a Linux RS1 2.6.18-238.el5 #1 SMP Thu Jan 13 15:51:15 ...