2017-11-17 10:50:13 ldy597321444 阅读数 1179
  • hibernate4从入门到大神(备java基础,mysql,javaee...

    Hibernate4开发技术:ORM思想,hibernate介绍,hibernate.cfg.xml配置,hbm.xml映射文件详解,主键生成策略使用,PO对象状态及状态的转换分析、一级缓存,Hibernate数据检索技术,Hibernate映射技术,Hibernate多表联合查询, Hibernate二级缓存技术,Hibernate分页技术,Hibernate性能优化技术。

    18395 人正在学习 去看看 任亮

平时做Unity3D开发的时候,避免不了要用到安卓的一些基本知识,所以我在博客里开通了Android板块,因为在大学里学了一年的安卓,所以对于安卓开发还是有一定了解的,但是因为好久没有开发安卓原生了,所以让我用原生完成一个完整的项目是不可能的,不过写一些安卓原生的东西给Unity用还是没问题的。对于一些简单的安卓原理也是懂得的。所以在平时对接一些SDK就没什么太大问题。之后我也会写一些关于对接SDK的文章,希望能对大家带来帮助。

首先,我们先来了解一下安卓系统,安卓系统是一种基于Linux的自由及开放源代码的操作系统。所以在移动设备上运行的时候需要虚拟机解析运行。所以安卓系统不是直接去控制硬件的,是通过虚拟机去控制的,这也是安卓系统相对于iOS系统运行流畅度慢的一个原因。但不是主要原因。(今天就先说这么多,这是我个人理解。如有雷同,纯属巧合。如有错误,欢迎指正)

今天要说的就是关于安卓的一个最重要的一个文件,那就是AndroidManifest.xml。AndroidManifest.xml 是每个android程序中必须的文件。它位于整个项目的根目录,描述了package中暴露的组件(activities, services, 等等),他们各自的实现类,各种能被处理的数据和启动位置。 除了能声明程序中的Activities, ContentProviders, Services, 和Intent Receivers,还能指定permissions和instrumentation(安全控制和测试)

AndroidManifest.xml结构

上面是xml文件的基本格式,具体的内容没有写,仅供参考。

首先我解释一下上面的文件的第一行,这一行代码会告诉解析器和浏览器,这个文件应该按照1.0版本的XML规则进行解析。encoding = “utf-8″表示此xml文件采用utf-8的编码格式。


1、第一层(<Manifest>):(属性)

A、xmlns:android
定义android命名空间,一般为http://schemas.android.com/apk/res/android,这样使得Android中各种标准属性能在文件中使用,提供了大部分元素中的数据。
B、package
指定本应用内java主程序包的包名,它也是一个应用进程的默认名称。
C、sharedUserId
表明数据权限,默认情况下,Android给每个APK分配一个唯一的UserID,所以默认是禁止不同APK访问共享数据的。若要共享数据,第一可以采用Share Preference方法,第二种就可以采用sharedUserId了,将不同APK的sharedUserId都设为一样,则这些APK之间就可以互相共享数据了。
D、sharedUserLabel
一个共享的用户名,它只有在设置了sharedUserId属性的前提下才会有意义
E、versionCode
是给设备程序识别版本(升级)用的必须是一个interger值代表app更新过多少次,比如第一版一般为1,之后若要更新版本就设置为2,3等等。
F、versionName
这个名称是给用户看的,可以将你的APP版本号设置为1.1版,后续更新版本设置为1.2、2.0版本等等。
G、installLocation
安装参数,是Android2.2中的一个新特性,installLocation有三个值可以选择:internalOnly、auto、preferExternal。
选择preferExternal,系统会优先考虑将APK安装到SD卡上(当然最终用户可以选择为内部ROM存储上,如果SD存储已满,也会安装到内部存储上)。
选择auto,系统将会根据存储空间自己去适应。
选择internalOnly是指必须安装到内部才能运行。
(注:需要进行后台类监控的APP最好安装在内部,而一些较大的游戏APP最好安装在SD卡上。现默认为安装在内部,如果把APP安装在SD卡上,首先得设置你的level为8,并且要配置android:installLocation这个参数的属性为preferExternal)

2、第二层(<Application>):属性
一个AndroidManifest.xml中必须含有一个Application标签,这个标签声明了每一个应用程序的组件及其属性(如icon,label,permission等)

A、android:allowClearUserData(‘true’ or ‘false’)
用户是否能选择自行清除数据,默认为true,程序管理器包含一个选择允许用户清除数据。当为true时,用户可自己清理用户数据,反之亦然。
B、android:allowTaskReparenting(‘true’ or ‘false’)
是否允许activity更换从属的任务,比如从短信息任务切换到浏览器任务。
C、android:backupAgent
这也是Android2.2中的一个新特性,设置该APP的备份,属性值应该是一个完整的类名,如com.project.TestCase,此属性并没有默认值,并且类名必须指定(就是个备份工具,将数据备份到云端的操作)。
D、android:debuggable
当设置为true时,表明该APP在手机上可以被调试。默认为false,在false的情况下调试该APP,就会报以下错误:
Device XXX requires that applications explicitely declare themselves as debuggable in their manifest.
Application XXX does not have the attribute ‘debuggable’ set to TRUE in its manifest and cannot be debugged.
E、android:description/android:label
此两个属性都是为许可提供的,均为字符串资源,当用户去看许可列表(android:label)或者某个许可的详细信息(android:description)时,这些字符串资源就可以显示给用户。label应当尽量简短,之需要告知用户该许可是在保护什么功能就行。而description可以用于具体描述获取该许可的程序可以做哪些事情,实际上让用户可以知道如果他们同意程序获取该权限的话,该程序可以做什么。我们通常用两句话来描述许可,第一句描述该许可,第二句警告用户如果批准该权限会可能有什么不好的事情发生。
F、android:enabled
Android系统是否能够实例化该应用程序的组件,如果为true,每个组件的enabled属性决定那个组件是否可以被 enabled。如果为false,它覆盖组件指定的值;所有组件都是disabled。
G、android:hasCode(‘true’ or ‘false’)
表示此APP是否包含任何的代码,默认为true,若为false,则系统在运行组件时,不会去尝试加载任何的APP代码。
一个应用程序自身不会含有任何的代码,除非内置组件类,比如Activity类,此类使用了AliasActivity类,当然这是个罕见的现象。
(在Android2.3可以用标准C来开发应用程序,可在androidManifest.xml中将此属性设置为false,因为这个APP本身已经不含有任何的JAVA代码了)
H、android:icon
声明整个APP的图标,图片一般都放在drawable文件夹下。
I、android:killAfterRestore
J、android:manageSpaceActivity
K、android:name
为应用程序所实现的Application子类的全名。当应用程序进程开始时,该类在所有应用程序组件之前被实例化。
若该类(如androidMain类)是在声明的package下,则可以直接声明android:name=”androidMain”,但此类是在package下面的子包的话,就必须声明为全路径或android:name=”package名称.子包名成.androidMain”。
L、android:permission
设置许可名,这个属性若在<application>上定义的话,是一个给应用程序的所有组件设置许可的便捷方式,当然它是被各组件设置的许可名所覆盖的。
M、android:presistent
该应用程序是否应该在任何时候都保持运行状态,默认为false。因为应用程序通常不应该设置本标识,持续模式仅仅应该设置给某些系统应用程序才是有意义的。
N、android:process
应用程序运行的进程名,它的默认值为<manifest>元素里设置的包名,当然每个组件都可以通过设置该属性来覆盖默认值。如果你想两个应用程序共用一个进程的话,你可以设置他们的android:process相同,但前提条件是他们共享一个用户ID及被赋予了相同证书的时候。
O、android:restoreAnyVersion
同样也是android2.2的一个新特性,用来表明应用是否准备尝试恢复所有的备份,甚至该备份是比当前设备上更要新的版本,默认是false。
P、android:taskAffinity
拥有相同的affinity的Activity理论上属于相同的Task,应用程序默认的affinity的名字是<manifest>元素中设定的package名。
Q、android:theme
是一个资源的主题风格,它定义了一个默认的主题风格给所有的activity,当然也可以在自己的theme里面去设置它,类似于style。

3、第三层(<Activity>):属性

(注:有些属性与application相同,再次不重复说明)
1)、android:alwaysRetainTaskState
是否保留状态不变, 比如切换回home, 再从新打开,activity处于最后的状态。比如一个浏览器拥有很多状态(当打开了多个TAB的时候),用户并不希望丢失这些状态时,此时可将此属性设置为true。
2)、android:clearTaskOnLaunch
如 P 是 activity, Q 是被P 触发的 activity, 然后返回Home, 重新启动 P,是否显示 Q
3)、android:configChanges
当配置发生改变时, 是否调用 onConfigurationChanged() 方法。
如 “locale|navigation|orientation”.
默认情况下. 如果手机方向旋转了,当前Activity后杀掉,然后根据方向重新加载这个Activity,并从onCreate开始重新加载。
如果设置了 这个选项, 当手机旋转后,当前Activity之后调用onConfigurationChanged() 方法,而不调用onCreate方法等。
4)、android:excludeFromRecents
是否可被显示在最近打开的activity列表里,默认是false
5)、android:finishOnTaskLaunch
当用户重新启动这个任务的时候,是否关闭已打开的activity,默认是false
如果这个属性和allowTaskReparenting都是true,这个属性就是王牌。Activity的亲和力将被忽略。该Activity已经被摧毁并非re-parented
6)、android:launchMode(Activity启动模式)
在多Activity开发中,有可能是自己应用之间的Activity跳转,或者夹带其他应用的可复用Activity。可能会希望跳转到原来某个Activity实例,而不是产生大量重复的Activity。这需要为Activity配置特定的启动模式,而不是使用默认的加载模式。
Activity有四种加载模式:
standard、singleTop、singleTask、singleInstance(其中前两个是一组、后两个是一组),默认为standard。
standard:就是intent将发送给新的实例,所以每次跳转都会生成新的activity。
singleTop:也是发送新的实例,但不同standard的一点是,在请求的Activity正好位于栈顶时(配置成singleTop的Activity),不会构造新的实例
singleTask:和后面的singleInstance都只创建一个实例,当intent到来,需要创建设置为singleTask的Activity的时候,系统会检查栈里面是否已经有该Activity的实例。如果有直接将intent发送给它。
singleInstance:
首先说明一下task这个概念,Task可以认为是一个栈,可放入多个Activity。比如启动一个应用,那么Android就创建了一个Task,然后启动这个应用的入口Activity,那在它的界面上调用其他的Activity也只是在这个task里面。那如果在多个task中共享一个Activity的话怎么办呢。举个例来说,如果开启一个导游服务类的应用程序,里面有个Activity是开启GOOGLE地图的,当按下home键退回到主菜单又启动GOOGLE地图的应用时,显示的就是刚才的地图,实际上是同一个Activity,实际上这就引入了singleInstance。singleInstance模式就是将该Activity单独放入一个栈中,这样这个栈中只有这一个Activity,不同应用的intent都由这个Activity接收和展示,这样就做到了共享。当然前提是这些应用都没有被销毁,所以刚才是按下的HOME键,如果按下了返回键,则无效
7)、android:multiprocess
是否允许多进程,默认是false
8)、android:noHistory
当用户从Activity上离开并且它在屏幕上不再可见时,Activity是否从Activity stack中清除并结束。默认是false。Activity不会留下历史痕迹
9)、android:screenOrientation
activity显示的模式:
默认为unspecified:由系统自动判断显示方向
landscape横屏模式,宽度比高度大
portrait竖屏模式, 高度比宽度大
user模式,用户当前首选的方向
behind模式:和该Activity下面的那个Activity的方向一致(在Activity堆栈中的)
sensor模式:有物理的感应器来决定。如果用户旋转设备这屏幕会横竖屏切换
nosensor模式:忽略物理感应器,这样就不会随着用户旋转设备而更改了
10)、android:stateNotNeeded
activity被销毁或者成功重启时是否保存状态
11)、android:windowSoftInputMode
activity主窗口与软键盘的交互模式,可以用来避免输入法面板遮挡问题,Android1.5后的一个新特性。
这个属性能影响两件事情:
【A】当有焦点产生时,软键盘是隐藏还是显示
【B】是否减少活动主窗口大小以便腾出空间放软键盘
各值的含义:
【A】stateUnspecified:软键盘的状态并没有指定,系统将选择一个合适的状态或依赖于主题的设置
【B】stateUnchanged:当这个activity出现时,软键盘将一直保持在上一个activity里的状态,无论是隐藏还是显示
【C】stateHidden:用户选择activity时,软键盘总是被隐藏
【D】stateAlwaysHidden:当该Activity主窗口获取焦点时,软键盘也总是被隐藏的
【E】stateVisible:软键盘通常是可见的
【F】stateAlwaysVisible:用户选择activity时,软键盘总是显示的状态
【G】adjustUnspecified:默认设置,通常由系统自行决定是隐藏还是显示
【H】adjustResize:该Activity总是调整屏幕的大小以便留出软键盘的空间
【I】adjustPan:当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分

4、第四层(<intent-filter>)
结构图:

intent-filter属性
android:priority(解释:有序广播主要是按照声明的优先级别,如A的级别高于B,那么,广播先传给A,再传给B。优先级别就是用设置priority属性来确定,范围是从-1000~1000,数越大优先级别越高)
Intent filter内会设定的资料包括action,data与category三种。也就是说filter只会与intent里的这三种资料作对比动作
action属性
action很简单,只有android:name这个属性。常见的android:name值为android.intent.action.MAIN,表明此activity是作为应用程序的入口。
category属性
category只有android:name属性。
常见的android:name值为android.intent.category.LAUNCHER(决定应用程序是否显示在程序列表里)
data属性

【1】每个<data>元素指定一个URI和数据类型(MIME类型)。它有四个属性scheme、host、port、path对应于URI的每个部分:
scheme://host:port/path
scheme的值一般为”http”,host为包名,port为端口号,path为具体地址。如:http://com.test.project:200/folder/etc
其中host和port合起来构成URI的凭据(authority),如果host没有指定,则port也会被忽略。
要让authority有意义,scheme也必须要指定。要让path有意义,scheme+authority也必须要指定。
【2】mimeType(指定数据类型),若mimeType为’Image’,则会从content Provider的指定地址中获取image类型的数据。还有’video’啥的,若设置为video/mp4,则表示在指定地址中获取mp4格式的video文件
【3】而pathPattern和PathPrefix主要是为了格式化path所使用的

5、第四层<meta-data>

这是该元素的基本结构.可以包含在<activity> <activity-alias> <service> <receiver>四个元素中。
android:name(解释:元数据项的名字,为了保证这个名字是唯一的,采用java风格的命名规范,如com.woody.project.fried)
android:resource(解释:资源的一个引用,指定给这个项的值是该资源的id。该id可以通过方法Bundle.getInt()来从meta-data中找到。)
android:value(解释:指定给这一项的值。可以作为值来指定的数据类型并且组件用来找回那些值的Bundle方法:[getString],[getInt],[getFloat],[getString],[getBoolean])

6、第三层<activity-alias>属性

<activity-alias>是为activity创建快捷方式的,如下实例:

其中android.targetActivity是指向对应快捷方式的activity,如上述的shortcut(此Activity名)
android:label是指快捷方式的名称,而快捷方式的图标默认是给定的application图标

7、第三层<service>
【1】service与activity同级,与activity不同的是,它不能自己启动的,运行在后台的程序,如果我们退出应用时,Service进程并没有结束,它仍然在后台运行。比如听音乐,网络下载数据等,都是由service运行的
【2】service生命周期:Service只继承了onCreate(),onStart(),onDestroy()三个方法,第一次启动Service时,先后调用了onCreate(),onStart()这两个方法,当停止Service时,则执行onDestroy()方法,如果Service已经启动了,当我们再次启动Service时,不会在执行onCreate()方法,而是直接执行onStart()方法
【3】service与activity间的通信
Service后端的数据最终还是要呈现在前端Activity之上的,因为启动Service时,系统会重新开启一个新的进程,这就涉及到不同进程间通信的问题了(AIDL),Activity与service间的通信主要用IBinder负责。
【4】

service标签内的属性之前已有描述,在此不重复了~

8、第三层<receiver>
receiver的属性与service一样,这里就不显示了
BroadcastReceiver:用于发送广播,broadcast是在应用程序之间传输信息的一种机制,而BroadcastReceiver是对发送出来的 Broadcast进行过滤接受并响应的一类组件。

9、第三层<provider>属性

contentProvider(数据存储)
【1】android:authorities:
标识这个ContentProvider,调用者可以根据这个标识来找到它
【2】android:grantUriPermission:
对某个URI授予的权限
【3】android:initOrder

10、第三层<uses-library>
用户库,可自定义。所有android的包都可以引用。

11、第一层<supports-screens>

这是在android1.6以后的新特性,支持多屏幕机制
各属性含义:这四个属性,是否支持大屏,是否支持中屏,是否支持小屏,是否支持多种不同密度。

12、第二层<uses-configuration />
参考<uses-feature>

这两者都是在描述应用所需要的硬件和软件特性,以便防止应用在没有这些特性的设备上安装。

13、第二层<uses-sdk />

描述应用所需的api level,就是版本,目前是android 2.2 = 8,android2.1 = 7,android1.6 = 4,android1.5=3
在此属性中可以指定支持的最小版本,目标版本以及最大版本

14、第二层<instrumentation />

定义一些用于探测和分析应用性能等等相关的类,可以监控程序。在各个应用程序的组件之前instrumentation类被实例化
android:functionalTest(解释:instrumentation类是否能运行一个功能测试,默认为false)
有关说明:
<permission>、<uses-permission>、<permission-tree />、<permission-group />区别:
最常用的当属<uses-permission>,当我们需要获取某个权限的时候就必须在我们的manifest文件中声明,此<uses-permission>与<application>同级,具体权限列表请看此处
通常情况下我们不需要为自己的应用程序声明某个权限,除非你提供了供其他应用程序调用的代码或者数据。这个时候你才需要使用<permission> 这个标签。很显然这个标签可以让我们声明自己的权限。比如:

那么在activity中就可以声明该自定义权限了,如:

当然自己声明的permission也不能随意的使用,还是需要使用<uses-permission>来声明你需要该权限
<permission-group> 就是声明一个标签,该标签代表了一组permissions,而<permission-tree>是为一组permissions声明了一个namespace。

转载地址:http://www.shijunzh.com
2011-04-11 10:10:00 sjzsp 阅读数 6668
  • hibernate4从入门到大神(备java基础,mysql,javaee...

    Hibernate4开发技术:ORM思想,hibernate介绍,hibernate.cfg.xml配置,hbm.xml映射文件详解,主键生成策略使用,PO对象状态及状态的转换分析、一级缓存,Hibernate数据检索技术,Hibernate映射技术,Hibernate多表联合查询, Hibernate二级缓存技术,Hibernate分页技术,Hibernate性能优化技术。

    18395 人正在学习 去看看 任亮

1、解析本地xml文件

Java代码  收藏代码
//找到本地test.xml文件  

NSString*path = [[NSBundlemainBundle]   pathForResource:@"test" ofType:@ "xml" ];   NSFileHandle*file = [NSFileHandlefileHandleForReadingAtPath:path];  
NSData*data = [file readDataToEndOfFile];
//得到xml文件  
//开始解析  
NSXMLParser* xmlRead = [[NSXMLParseralloc] initWithData:data];
//初始化NSXMLParser对象  
[data release]; 
[xmlRead setDelegate:self];//设置NSXMLParser对象的解析方法代理  
[xmlRead parse];//调用代理解析NSXMLParser对象,看解析是否成功   



2、解析网络xml文件

Java代码  收藏代码
#define URIString @ "http://192.168.247.76:8899/hisyo_cn/test.xml"  
//首先链接网络文件  
NSURLRequest *theRequest=[NSURLRequest requestWithURL:[NSURL URLWithString:URIString]  cachePolicy:NSURLRequestUseProtocolCachePolicy  timeoutInterval:15 ];     NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];     if  (theConnection) { 
               //得到文件数据   
       receivedData=[[NSMutableData data] retain];  
    }   
    else   
    {  
       NSLog(@"error" ); 
    }  

- (void )connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {       [receivedData setLength:0 ]; 
}  
 
- (void )connection:(NSURLConnection *)connection didReceiveData:(NSData *)data  {       [receivedData appendData:data];        

- (void )connection:(NSURLConnection *)connection  didFailWithError:(NSError *)error 
   [connection release];  
    [receivedData release];  
    NSLog(@"Error" );  
   //超过设定好的链接时间显示链接失败   
    [theContent setText:@"Connection defeat" ]; 

- (void )connectionDidFinishLoading:(NSURLConnection *)connection  {       NSString *content = [[NSString alloc] initWithData: receivedData encoding: NSUTF8StringEncoding];   NSLog(@"content: %@" ,content);  
[theContent setText:content];  
 //开始解析获取的receivedData   
xmlRead = [[NSXMLParser alloc] initWithData:receivedData]; 
[xmlRead setDelegate:self];//设置NSXMLParser对象的解析方法代理  
[xmlRead parse];//调用代理解析NSXMLParser对象,看解析是否成   //NSString *content = [[NSString alloc] initWithData: receivedData encoding: NSJapaneseEUCStringEncoding];   

[connection release];  
[receivedData release];

2017-01-07 22:08:26 lei1160427600 阅读数 1628
  • hibernate4从入门到大神(备java基础,mysql,javaee...

    Hibernate4开发技术:ORM思想,hibernate介绍,hibernate.cfg.xml配置,hbm.xml映射文件详解,主键生成策略使用,PO对象状态及状态的转换分析、一级缓存,Hibernate数据检索技术,Hibernate映射技术,Hibernate多表联合查询, Hibernate二级缓存技术,Hibernate分页技术,Hibernate性能优化技术。

    18395 人正在学习 去看看 任亮

什么是POM?

POM是项目对象模型(Project Object Model)的简称,它是Maven项目中的文件,使用XML表示,名称叫做pom.xml。在Maven中,当谈到Project的时候,不仅仅是一堆包含代码的文件。一个Project往往包含一个配置文件,包括了与开发者有关的,缺陷跟踪系统,组织与许可,项目的URL,项目依赖,以及其他。它包含了所有与这个项目相关的东西。事实上,在Maven世界中,project可以什么都没有,甚至没有代码,但是必须包含pom.xml文件。

概览

下面是一个POM项目中的pom.xml文件中包含的元素。注意,其中的modelVersion是4.0.0,这是当前仅有的可以被Maven2&3同时支持的POM版本,它是必须的。

复制代码
 1 <project xmlns="http://maven.apache.org/POM/4.0.0"
 2          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 3          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
 4             http://maven.apache.org/xsd/maven-4.0.0.xsd">
 5     <modelVersion>4.0.0</modelVersion>
 6     
 7     <!-- 基本设置 -->
 8     <groupId>...</groupId>
 9     <artifactId>...</artifactId>
10     <version>...</version>
11     <packaging>...</packaging>
12     <dependencies>...</dependencies>
13     <parent>...</parent>
14     <dependencyManagement>...</dependencyManagement>
15     <modules>...</modules>
16     <properties>...</properties>
17     
18     <!-- 构建过程的设置 -->
19     <build>...</build>
20     <reporting>...</reporting>
21     
22     <!-- 项目信息设置 -->
23     <name>...</name>
24     <description>...</description>
25     <url>...</url>
26     <inceptionYear>...</inceptionYear>
27     <licenses>...</licenses>
28     <organization>...</organization>
29     <developers>...</developers>
30     <contributors>...</contributors>
31     
32     <!-- 环境设置 -->
33     <issueManagement>...</issueManagement>
34     <ciManagement>...</ciManagement>
35     <mailingLists>...</mailingLists>
36     <scm>...</scm>
37     <prerequisites>...</prerequisites>
38     <repositories>...</repositories>
39     <pluginRepositories>...</pluginRepositories>
40     <distributionManagement>...</distributionManagement>
41     <profiles>...</profiles>
42 </project>
复制代码

基本的设置:

POM包含了一个project所需要的所有信息,当然也就包含了构建过程中所需要的插件的配置信息,事实上,这里申明了"who","what",和"where",然而构建生命周期(build lifecycle)s中说的是"when"和"how"。这并不是说POM并能影响生命周期的过程-事实上它可以。例如,配置一个可以嵌入ant任务到POM的mavem-antrun-plugin。它基本上就是一个声明。就像build.xml告诉ant当运行时它该做什么一样,一个POM申明了它自己的配置。如果外力迫使生命周期跳过了ant插件的执行,这并不影响那些已经执行过的插件产生的效果。这一点和build.xml不一样。

 

复制代码
1 <project xmlns="http://maven.apache.org/POM/4.0.0"
2          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
4             http://maven.apache.org/xsd/maven-4.0.0.xsd">
5     <modelVersion>4.0.0</modelVersion>
6     <groupId>org.codehaus.mojo</groupId>
7     <artifactId>my-project</artifactId>
8     <version>1.0</version>
9 </project>
复制代码

Maven坐标

上面的POM定义的是Maven2&3都承认的最小部分。groupId:artifactId:version是必须的字段(尽管在继承中groupId和version不需要明确指出)。这三个字段就像地址和邮戳,它标记了仓库中的特定位置,就像Maven projects的坐标系统一样。

 

maven POM.xml详解

[html] view plaincopy
 
  1. <project xmlns="http://maven.apache.org/POM/4.0.0"     
  2.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/maven-v4_0_0.xsd">     
  4.     <!--父项目的坐标。如果项目中没有规定某个元素的值,那么父项目中的对应值即为项目的默认值。 坐标包括group ID,artifact ID和 version。-->    
  5.     <parent>    
  6.      <!--被继承的父项目的构件标识符-->    
  7.      <artifactId/>    
  8.      <!--被继承的父项目的全球唯一标识符-->    
  9.      <groupId/>    
  10.      <!--被继承的父项目的版本-->    
  11.      <version/>    
  12.      <!-- 父项目的pom.xml文件的相对路径。相对路径允许你选择一个不同的路径。默认值是../pom.xml。Maven首先在构建当前项目的地方寻找父项 目的pom,其次在文件系统的这个位置(relativePath位置),然后在本地仓库,最后在远程仓库寻找父项目的pom。-->    
  13.      <relativePath/>    
  14.  </parent>    
  15.  <!--声明项目描述符遵循哪一个POM模型版本。模型本身的版本很少改变,虽然如此,但它仍然是必不可少的,这是为了当Maven引入了新的特性或者其他模型变更的时候,确保稳定性。-->       
  16.     <modelVersion>4.0.0</modelVersion>     
  17.     <!--项目的全球唯一标识符,通常使用全限定的包名区分该项目和其他项目。并且构建时生成的路径也是由此生成, 如com.mycompany.app生成的相对路径为:/com/mycompany/app-->     
  18.     <groupId>asia.banseon</groupId>     
  19.     <!-- 构件的标识符,它和group ID一起唯一标识一个构件。换句话说,你不能有两个不同的项目拥有同样的artifact ID和groupID;在某个 特定的group ID下,artifact ID也必须是唯一的。构件是项目产生的或使用的一个东西,Maven为项目产生的构件包括:JARs,源 码,二进制发布和WARs等。-->     
  20.     <artifactId>banseon-maven2</artifactId>     
  21.     <!--项目产生的构件类型,例如jar、war、ear、pom。插件可以创建他们自己的构件类型,所以前面列的不是全部构件类型-->     
  22.     <packaging>jar</packaging>     
  23.     <!--项目当前版本,格式为:主版本.次版本.增量版本-限定版本号-->     
  24.     <version>1.0-SNAPSHOT</version>     
  25.     <!--项目的名称, Maven产生的文档用-->     
  26.     <name>banseon-maven</name>     
  27.     <!--项目主页的URL, Maven产生的文档用-->     
  28.     <url>http://www.baidu.com/banseon</url>     
  29.     <!-- 项目的详细描述, Maven 产生的文档用。  当这个元素能够用HTML格式描述时(例如,CDATA中的文本会被解析器忽略,就可以包含HTML标 签), 不鼓励使用纯文本描述。如果你需要修改产生的web站点的索引页面,你应该修改你自己的索引页文件,而不是调整这里的文档。-->     
  30.     <description>A maven project to study maven.</description>     
  31.     <!--描述了这个项目构建环境中的前提条件。-->    
  32.  <prerequisites>    
  33.   <!--构建该项目或使用该插件所需要的Maven的最低版本-->    
  34.     <maven/>    
  35.  </prerequisites>    
  36.  <!--项目的问题管理系统(Bugzilla, Jira, Scarab,或任何你喜欢的问题管理系统)的名称和URL,本例为 jira-->     
  37.     <issueManagement>    
  38.      <!--问题管理系统(例如jira)的名字,-->     
  39.         <system>jira</system>     
  40.         <!--该项目使用的问题管理系统的URL-->    
  41.         <url>http://jira.baidu.com/banseon</url>     
  42.     </issueManagement>     
  43.     <!--项目持续集成信息-->    
  44.  <ciManagement>    
  45.   <!--持续集成系统的名字,例如continuum-->    
  46.   <system/>    
  47.   <!--该项目使用的持续集成系统的URL(如果持续集成系统有web接口的话)。-->    
  48.   <url/>    
  49.   <!--构建完成时,需要通知的开发者/用户的配置项。包括被通知者信息和通知条件(错误,失败,成功,警告)-->    
  50.   <notifiers>    
  51.    <!--配置一种方式,当构建中断时,以该方式通知用户/开发者-->    
  52.    <notifier>    
  53.     <!--传送通知的途径-->    
  54.     <type/>    
  55.     <!--发生错误时是否通知-->    
  56.     <sendOnError/>    
  57.     <!--构建失败时是否通知-->    
  58.     <sendOnFailure/>    
  59.     <!--构建成功时是否通知-->    
  60.     <sendOnSuccess/>    
  61.     <!--发生警告时是否通知-->    
  62.     <sendOnWarning/>    
  63.     <!--不赞成使用。通知发送到哪里-->    
  64.     <address/>    
  65.     <!--扩展配置项-->    
  66.     <configuration/>    
  67.    </notifier>    
  68.   </notifiers>    
  69.  </ciManagement>    
  70.  <!--项目创建年份,4位数字。当产生版权信息时需要使用这个值。-->    
  71.     <inceptionYear/>    
  72.     <!--项目相关邮件列表信息-->     
  73.     <mailingLists>    
  74.      <!--该元素描述了项目相关的所有邮件列表。自动产生的网站引用这些信息。-->     
  75.         <mailingList>     
  76.          <!--邮件的名称-->    
  77.             <name>Demo</name>     
  78.             <!--发送邮件的地址或链接,如果是邮件地址,创建文档时,mailto: 链接会被自动创建-->     
  79.             <post>banseon@126.com</post>     
  80.             <!--订阅邮件的地址或链接,如果是邮件地址,创建文档时,mailto: 链接会被自动创建-->     
  81.             <subscribe>banseon@126.com</subscribe>     
  82.             <!--取消订阅邮件的地址或链接,如果是邮件地址,创建文档时,mailto: 链接会被自动创建-->     
  83.             <unsubscribe>banseon@126.com</unsubscribe>     
  84.             <!--你可以浏览邮件信息的URL-->    
  85.             <archive>http:/hi.baidu.com/banseon/demo/dev/</archive>     
  86.         </mailingList>     
  87.     </mailingLists>     
  88.     <!--项目开发者列表-->     
  89.     <developers>     
  90.      <!--某个项目开发者的信息-->    
  91.         <developer>     
  92.          <!--SCM里项目开发者的唯一标识符-->    
  93.             <id>HELLO WORLD</id>     
  94.             <!--项目开发者的全名-->    
  95.             <name>banseon</name>     
  96.             <!--项目开发者的email-->    
  97.             <email>banseon@126.com</email>     
  98.             <!--项目开发者的主页的URL-->    
  99.             <url/>    
  100.             <!--项目开发者在项目中扮演的角色,角色元素描述了各种角色-->    
  101.             <roles>     
  102.                 <role>Project Manager</role>     
  103.                 <role>Architect</role>     
  104.             </roles>    
  105.             <!--项目开发者所属组织-->    
  106.             <organization>demo</organization>     
  107.             <!--项目开发者所属组织的URL-->    
  108.             <organizationUrl>http://hi.baidu.com/banseon</organizationUrl>     
  109.             <!--项目开发者属性,如即时消息如何处理等-->    
  110.             <properties>     
  111.                 <dept>No</dept>     
  112.             </properties>    
  113.             <!--项目开发者所在时区, -11到12范围内的整数。-->    
  114.             <timezone>-5</timezone>     
  115.         </developer>     
  116.     </developers>     
  117.     <!--项目的其他贡献者列表-->     
  118.     <contributors>    
  119.      <!--项目的其他贡献者。参见developers/developer元素-->    
  120.      <contributor>    
  121.    <name/><email/><url/><organization/><organizationUrl/><roles/><timezone/><properties/>    
  122.      </contributor>         
  123.     </contributors>       
  124.     <!--该元素描述了项目所有License列表。 应该只列出该项目的license列表,不要列出依赖项目的 license列表。如果列出多个license,用户可以选择它们中的一个而不是接受所有license。-->     
  125.     <licenses>    
  126.      <!--描述了项目的license,用于生成项目的web站点的license页面,其他一些报表和validation也会用到该元素。-->     
  127.         <license>    
  128.          <!--license用于法律上的名称-->    
  129.             <name>Apache 2</name>     
  130.             <!--官方的license正文页面的URL-->    
  131.             <url>http://www.baidu.com/banseon/LICENSE-2.0.txt</url>     
  132.             <!--项目分发的主要方式:    
  133.               repo,可以从Maven库下载    
  134.               manual, 用户必须手动下载和安装依赖-->    
  135.             <distribution>repo</distribution>     
  136.             <!--关于license的补充信息-->    
  137.             <comments>A business-friendly OSS license</comments>     
  138.         </license>     
  139.     </licenses>     
  140.     <!--SCM(Source Control Management)标签允许你配置你的代码库,供Maven web站点和其它插件使用。-->     
  141.     <scm>     
  142.         <!--SCM的URL,该URL描述了版本库和如何连接到版本库。欲知详情,请看SCMs提供的URL格式和列表。该连接只读。-->     
  143.         <connection>     
  144.             scm:svn:http://svn.baidu.com/banseon/maven/banseon/banseon-maven2-trunk(dao-trunk)      
  145.         </connection>     
  146.         <!--给开发者使用的,类似connection元素。即该连接不仅仅只读-->    
  147.         <developerConnection>     
  148.             scm:svn:http://svn.baidu.com/banseon/maven/banseon/dao-trunk      
  149.         </developerConnection>    
  150.         <!--当前代码的标签,在开发阶段默认为HEAD-->    
  151.         <tag/>           
  152.         <!--指向项目的可浏览SCM库(例如ViewVC或者Fisheye)的URL。-->     
  153.         <url>http://svn.baidu.com/banseon</url>     
  154.     </scm>     
  155.     <!--描述项目所属组织的各种属性。Maven产生的文档用-->     
  156.     <organization>     
  157.      <!--组织的全名-->    
  158.         <name>demo</name>     
  159.         <!--组织主页的URL-->    
  160.         <url>http://www.baidu.com/banseon</url>     
  161.     </organization>    
  162.     <!--构建项目需要的信息-->    
  163.     <build>    
  164.      <!--该元素设置了项目源码目录,当构建项目的时候,构建系统会编译目录里的源码。该路径是相对于pom.xml的相对路径。-->    
  165.   <sourceDirectory/>    
  166.   <!--该元素设置了项目脚本源码目录,该目录和源码目录不同:绝大多数情况下,该目录下的内容 会被拷贝到输出目录(因为脚本是被解释的,而不是被编译的)。-->    
  167.   <scriptSourceDirectory/>    
  168.   <!--该元素设置了项目单元测试使用的源码目录,当测试项目的时候,构建系统会编译目录里的源码。该路径是相对于pom.xml的相对路径。-->    
  169.   <testSourceDirectory/>    
  170.   <!--被编译过的应用程序class文件存放的目录。-->    
  171.   <outputDirectory/>    
  172.   <!--被编译过的测试class文件存放的目录。-->    
  173.   <testOutputDirectory/>    
  174.   <!--使用来自该项目的一系列构建扩展-->    
  175.   <extensions>    
  176.    <!--描述使用到的构建扩展。-->    
  177.    <extension>    
  178.     <!--构建扩展的groupId-->    
  179.     <groupId/>    
  180.     <!--构建扩展的artifactId-->    
  181.     <artifactId/>    
  182.     <!--构建扩展的版本-->    
  183.     <version/>    
  184.    </extension>    
  185.   </extensions>    
  186.   <!--当项目没有规定目标(Maven2 叫做阶段)时的默认值-->    
  187.   <defaultGoal/>    
  188.   <!--这个元素描述了项目相关的所有资源路径列表,例如和项目相关的属性文件,这些资源被包含在最终的打包文件里。-->    
  189.   <resources>    
  190.    <!--这个元素描述了项目相关或测试相关的所有资源路径-->    
  191.    <resource>    
  192.     <!-- 描述了资源的目标路径。该路径相对target/classes目录(例如${project.build.outputDirectory})。举个例 子,如果你想资源在特定的包里(org.apache.maven.messages),你就必须该元素设置为org/apache/maven /messages。然而,如果你只是想把资源放到源码目录结构里,就不需要该配置。-->    
  193.     <targetPath/>    
  194.     <!--是否使用参数值代替参数名。参数值取自properties元素或者文件里配置的属性,文件在filters元素里列出。-->    
  195.     <filtering/>    
  196.     <!--描述存放资源的目录,该路径相对POM路径-->    
  197.     <directory/>    
  198.     <!--包含的模式列表,例如**/*.xml.-->    
  199.     <includes/>    
  200.     <!--排除的模式列表,例如**/*.xml-->    
  201.     <excludes/>    
  202.    </resource>    
  203.   </resources>    
  204.   <!--这个元素描述了单元测试相关的所有资源路径,例如和单元测试相关的属性文件。-->    
  205.   <testResources>    
  206.    <!--这个元素描述了测试相关的所有资源路径,参见build/resources/resource元素的说明-->    
  207.    <testResource>    
  208.     <targetPath/><filtering/><directory/><includes/><excludes/>    
  209.    </testResource>    
  210.   </testResources>    
  211.   <!--构建产生的所有文件存放的目录-->    
  212.   <directory/>    
  213.   <!--产生的构件的文件名,默认值是${artifactId}-${version}。-->    
  214.   <finalName/>    
  215.   <!--当filtering开关打开时,使用到的过滤器属性文件列表-->    
  216.   <filters/>    
  217.   <!--子项目可以引用的默认插件信息。该插件配置项直到被引用时才会被解析或绑定到生命周期。给定插件的任何本地配置都会覆盖这里的配置-->    
  218.   <pluginManagement>    
  219.    <!--使用的插件列表 。-->    
  220.    <plugins>    
  221.     <!--plugin元素包含描述插件所需要的信息。-->    
  222.     <plugin>    
  223.      <!--插件在仓库里的group ID-->    
  224.      <groupId/>    
  225.      <!--插件在仓库里的artifact ID-->    
  226.      <artifactId/>    
  227.      <!--被使用的插件的版本(或版本范围)-->    
  228.      <version/>    
  229.      <!--是否从该插件下载Maven扩展(例如打包和类型处理器),由于性能原因,只有在真需要下载时,该元素才被设置成enabled。-->    
  230.      <extensions/>    
  231.      <!--在构建生命周期中执行一组目标的配置。每个目标可能有不同的配置。-->    
  232.      <executions>    
  233.       <!--execution元素包含了插件执行需要的信息-->    
  234.       <execution>    
  235.        <!--执行目标的标识符,用于标识构建过程中的目标,或者匹配继承过程中需要合并的执行目标-->    
  236.        <id/>    
  237.        <!--绑定了目标的构建生命周期阶段,如果省略,目标会被绑定到源数据里配置的默认阶段-->    
  238.        <phase/>    
  239.        <!--配置的执行目标-->    
  240.        <goals/>    
  241.        <!--配置是否被传播到子POM-->    
  242.        <inherited/>    
  243.        <!--作为DOM对象的配置-->    
  244.        <configuration/>    
  245.       </execution>    
  246.      </executions>    
  247.      <!--项目引入插件所需要的额外依赖-->    
  248.      <dependencies>    
  249.       <!--参见dependencies/dependency元素-->    
  250.       <dependency>    
  251.        ......    
  252.       </dependency>    
  253.      </dependencies>         
  254.      <!--任何配置是否被传播到子项目-->    
  255.      <inherited/>    
  256.      <!--作为DOM对象的配置-->    
  257.      <configuration/>    
  258.     </plugin>    
  259.    </plugins>    
  260.   </pluginManagement>    
  261.   <!--使用的插件列表-->    
  262.   <plugins>    
  263.    <!--参见build/pluginManagement/plugins/plugin元素-->    
  264.    <plugin>    
  265.     <groupId/><artifactId/><version/><extensions/>    
  266.     <executions>    
  267.      <execution>    
  268.       <id/><phase/><goals/><inherited/><configuration/>    
  269.      </execution>    
  270.     </executions>    
  271.     <dependencies>    
  272.      <!--参见dependencies/dependency元素-->    
  273.      <dependency>    
  274.       ......    
  275.      </dependency>    
  276.     </dependencies>    
  277.     <goals/><inherited/><configuration/>    
  278.    </plugin>    
  279.   </plugins>    
  280.  </build>    
  281.  <!--在列的项目构建profile,如果被激活,会修改构建处理-->    
  282.  <profiles>    
  283.   <!--根据环境参数或命令行参数激活某个构建处理-->    
  284.   <profile>    
  285.    <!--构建配置的唯一标识符。即用于命令行激活,也用于在继承时合并具有相同标识符的profile。-->    
  286.    <id/>    
  287.    <!--自动触发profile的条件逻辑。Activation是profile的开启钥匙。profile的力量来自于它    
  288.    能够在某些特定的环境中自动使用某些特定的值;这些环境通过activation元素指定。activation元素并不是激活profile的唯一方式。-->    
  289.    <activation>    
  290.     <!--profile默认是否激活的标志-->    
  291.     <activeByDefault/>    
  292.     <!--当匹配的jdk被检测到,profile被激活。例如,1.4激活JDK1.4,1.4.0_2,而!1.4激活所有版本不是以1.4开头的JDK。-->    
  293.     <jdk/>    
  294.     <!--当匹配的操作系统属性被检测到,profile被激活。os元素可以定义一些操作系统相关的属性。-->    
  295.     <os>    
  296.      <!--激活profile的操作系统的名字-->    
  297.      <name>Windows XP</name>    
  298.      <!--激活profile的操作系统所属家族(如 'windows')-->    
  299.      <family>Windows</family>    
  300.      <!--激活profile的操作系统体系结构 -->    
  301.      <arch>x86</arch>    
  302.      <!--激活profile的操作系统版本-->    
  303.      <version>5.1.2600</version>    
  304.     </os>    
  305.     <!--如果Maven检测到某一个属性(其值可以在POM中通过${名称}引用),其拥有对应的名称和值,Profile就会被激活。如果值    
  306.     字段是空的,那么存在属性名称字段就会激活profile,否则按区分大小写方式匹配属性值字段-->    
  307.     <property>    
  308.      <!--激活profile的属性的名称-->    
  309.      <name>mavenVersion</name>    
  310.      <!--激活profile的属性的值-->    
  311.      <value>2.0.3</value>    
  312.     </property>    
  313.     <!--提供一个文件名,通过检测该文件的存在或不存在来激活profile。missing检查文件是否存在,如果不存在则激活    
  314.     profile。另一方面,exists则会检查文件是否存在,如果存在则激活profile。-->    
  315.     <file>    
  316.      <!--如果指定的文件存在,则激活profile。-->    
  317.      <exists>/usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/</exists>    
  318.      <!--如果指定的文件不存在,则激活profile。-->    
  319.      <missing>/usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/</missing>    
  320.     </file>    
  321.    </activation>    
  322.    <!--构建项目所需要的信息。参见build元素-->    
  323.    <build>    
  324.     <defaultGoal/>    
  325.     <resources>    
  326.      <resource>    
  327.       <targetPath/><filtering/><directory/><includes/><excludes/>    
  328.      </resource>    
  329.     </resources>    
  330.     <testResources>    
  331.      <testResource>    
  332.       <targetPath/><filtering/><directory/><includes/><excludes/>    
  333.      </testResource>    
  334.     </testResources>    
  335.     <directory/><finalName/><filters/>    
  336.     <pluginManagement>    
  337.      <plugins>    
  338.       <!--参见build/pluginManagement/plugins/plugin元素-->    
  339.       <plugin>    
  340.        <groupId/><artifactId/><version/><extensions/>    
  341.        <executions>    
  342.         <execution>    
  343.          <id/><phase/><goals/><inherited/><configuration/>    
  344.         </execution>    
  345.        </executions>    
  346.        <dependencies>    
  347.         <!--参见dependencies/dependency元素-->    
  348.         <dependency>    
  349.          ......    
  350.         </dependency>    
  351.        </dependencies>    
  352.        <goals/><inherited/><configuration/>    
  353.       </plugin>    
  354.      </plugins>    
  355.     </pluginManagement>    
  356.     <plugins>    
  357.      <!--参见build/pluginManagement/plugins/plugin元素-->    
  358.      <plugin>    
  359.       <groupId/><artifactId/><version/><extensions/>    
  360.       <executions>    
  361.        <execution>    
  362.         <id/><phase/><goals/><inherited/><configuration/>    
  363.        </execution>    
  364.       </executions>    
  365.       <dependencies>    
  366.        <!--参见dependencies/dependency元素-->    
  367.        <dependency>    
  368.         ......    
  369.        </dependency>    
  370.       </dependencies>    
  371.       <goals/><inherited/><configuration/>    
  372.      </plugin>    
  373.     </plugins>    
  374.    </build>    
  375.    <!--模块(有时称作子项目) 被构建成项目的一部分。列出的每个模块元素是指向该模块的目录的相对路径-->    
  376.    <modules/>    
  377.    <!--发现依赖和扩展的远程仓库列表。-->    
  378.    <repositories>    
  379.     <!--参见repositories/repository元素-->    
  380.     <repository>    
  381.      <releases>    
  382.       <enabled/><updatePolicy/><checksumPolicy/>    
  383.      </releases>    
  384.      <snapshots>    
  385.       <enabled/><updatePolicy/><checksumPolicy/>    
  386.      </snapshots>    
  387.      <id/><name/><url/><layout/>    
  388.     </repository>    
  389.    </repositories>    
  390.    <!--发现插件的远程仓库列表,这些插件用于构建和报表-->    
  391.    <pluginRepositories>    
  392.     <!--包含需要连接到远程插件仓库的信息.参见repositories/repository元素-->        
  393.     <pluginRepository>    
  394.      <releases>    
  395.       <enabled/><updatePolicy/><checksumPolicy/>    
  396.      </releases>    
  397.      <snapshots>    
  398.       <enabled/><updatePolicy/><checksumPolicy/>    
  399.      </snapshots>    
  400.      <id/><name/><url/><layout/>    
  401.     </pluginRepository>    
  402.    </pluginRepositories>    
  403.    <!--该元素描述了项目相关的所有依赖。 这些依赖组成了项目构建过程中的一个个环节。它们自动从项目定义的仓库中下载。要获取更多信息,请看项目依赖机制。-->    
  404.    <dependencies>    
  405.     <!--参见dependencies/dependency元素-->    
  406.     <dependency>    
  407.      ......    
  408.     </dependency>    
  409.    </dependencies>    
  410.    <!--不赞成使用. 现在Maven忽略该元素.-->    
  411.    <reports/>       
  412.    <!--该元素包括使用报表插件产生报表的规范。当用户执行“mvn site”,这些报表就会运行。 在页面导航栏能看到所有报表的链接。参见reporting元素-->    
  413.    <reporting>    
  414.     ......    
  415.    </reporting>    
  416.    <!--参见dependencyManagement元素-->    
  417.    <dependencyManagement>    
  418.     <dependencies>    
  419.      <!--参见dependencies/dependency元素-->    
  420.      <dependency>    
  421.       ......    
  422.      </dependency>    
  423.     </dependencies>    
  424.    </dependencyManagement>    
  425.    <!--参见distributionManagement元素-->    
  426.    <distributionManagement>    
  427.     ......    
  428.    </distributionManagement>    
  429.    <!--参见properties元素-->    
  430.    <properties/>    
  431.   </profile>    
  432.  </profiles>    
  433.  <!--模块(有时称作子项目) 被构建成项目的一部分。列出的每个模块元素是指向该模块的目录的相对路径-->    
  434.  <modules/>    
  435.     <!--发现依赖和扩展的远程仓库列表。-->     
  436.     <repositories>     
  437.      <!--包含需要连接到远程仓库的信息-->    
  438.         <repository>    
  439.          <!--如何处理远程仓库里发布版本的下载-->    
  440.          <releases>    
  441.           <!--true或者false表示该仓库是否为下载某种类型构件(发布版,快照版)开启。 -->    
  442.     <enabled/>    
  443.     <!--该元素指定更新发生的频率。Maven会比较本地POM和远程POM的时间戳。这里的选项是:always(一直),daily(默认,每日),interval:X(这里X是以分钟为单位的时间间隔),或者never(从不)。-->    
  444.     <updatePolicy/>    
  445.     <!--当Maven验证构件校验文件失败时该怎么做:ignore(忽略),fail(失败),或者warn(警告)。-->    
  446.     <checksumPolicy/>    
  447.    </releases>