| Julia 的个人资料美丽日子照片日志列表 | 帮助 |
|
|
CVS的常用命令概述:CVS是一个C/S系统,多个开发人员通过一个中心版本控制系统来记录文件版本,从而达到保证文件同步的目的。
CVS服务器(文件版本库) 以下是本文主要内容:开发人员可以主要挑选2, 6看就可以了,CVS的管理员则更需要懂的更多一些
一个系统20%的功能往往能够满足80%的需求,CVS也不例外,以下是CVS最常用的功能,可能用到的还不到它全部命令选项的10%,更多的功能请在实际应用过程中体会,学习过程中应该是用多少,学多少,用到了再学也不迟。
环境设置:指定CVS库的路径CVSROOT 后面还提到远程CVS服务器的设置: 一个项目的首次导入 项目导出:将代码从CVS库里导出 注意:第一次导出以后,就不是通过cvs checkout来同步文件了,而是要进入刚才cvs checkout project_name导出的project_name目录下进行具体文件的版本同步(添加,修改,删除)操作。 将文件同步到最新的版本: 确认修改写入到CVS库里: 注意:CVS的很多动作都是通过cvs commit进行最后确认并修改的,最好每次只修改一个文件。在确认的前,还需要用户填写修改注释,以帮助其他开发人员了解修改的原因。如果不用写-m "comments"而直接确认`cvs commit file_name` 的话,cvs会自动调用系统缺省的文字编辑器(一般是vi)要求你写入注释。 删除文件: 注意:很多cvs命令都有缩写形式:commit=>ci; update=>up; checkout=>co; remove=>rm;
正确的通过CVS恢复旧版本的方法: 移动文件:文件重命名 删除,移动目录: CVS Branch:项目多分支同步开发 确认版本里程碑:多个文件各自版本号不一样,项目到一定阶段,可以给所有文件统一指定一个阶段里程碑版本号,方便以后按照这个阶段里程碑版本号导出项目,同时也是项目的多个分支开发的基础。 开始一个新的里程碑: 注意:CVS里的revsion和软件包的发布版本可以没有直接的关系。但所有文件使用和发布版本一致的版本号比较有助于维护。 在开发项目的2.x版本的时候发现1.x有问题,但2.x又不敢用,则从先前标记的里程碑:release_1_0导出一个分支release_1_0_patch 一些人先在另外一个目录下导出release_1_0_patch这个分支:解决1.0中的紧急问题, 在release_1_0_patch上修正错误后,标记一个1.0的错误修正版本号 如果2.0认为这些错误修改在2.0里也需要,也可以在2.0的开发目录下合并release_1_0_patch_1中的修改到当前代码中: CVS的远程认证:通过SSH远程访问CVS 使用cvs本身的远程认证很麻烦,需要定义服务器和用户组,用户名,设置密码等,而且不安全,因此和系统本地帐号认证并通过SSH传输是比较好的办法,通过在客户机的/etc/profile里设置一下内容: 注意:port是指相应服务器SSH的端口,不是cvs pserver的端口 CVSWEB就是CVS的WEB界面,可以大大提高程序员定位修改的效率: CVSWEB的下载:CVSWEB从最初的版本已经演化出很多功能界面更丰富的版本,这个是个人感觉觉得安装设置比较方便的:
CVSWEB可不能随便开放给所有用户,因此需要使用WEB用户认证: 将$Id$ 加在程序文件开头的注释里是一个很好的习惯,cvs能够自动解释更新其中的内容成:file_name version time user_name 的格式,比如:cvs_card.txt,v 1.1 2002/04/05 04:24:12 chedong Exp,可以这些信息了解文件的最后修改人和修改时间 ==================================== ==================================== CVS vs VSS CVS没有文件锁定模式,VSS在check out同时,同时记录了文件被导出者锁定。 CVS是update commit, VSS是check out check in 在CVS中,标记自动更新功能缺省是打开的,这样也带来一个潜在的问题,就是不用-kb方式添加binary文件的话在cvs自动更新时可能会导致文件失效。 Virsual SourceSafe中这个功能称之为Keyword Explaination,缺省是关闭的,需要通过OPITION打开,并指定需要进行源文件关键词扫描的类型:*.txt,*.java,*.html... 对于Virsual SourceSafe和CVS都通用的TAG有: 尽量使用通用的关键词保证代码在CVS和VSS都能方便的跟踪。
相关资源: CVS HOME: CVS FAQ: CVS 免费书: CVS 命令的速查卡片:
PowerDesigner教程五 概念数据模型目标: 本文主要介绍数据项、新增数据项、数据项的唯一性代码选项和重用选项等。 一、数据项 数据项(Data Item)是信息存储的最小单位,它可以附加在实体上作为实体的属性。 注意:模型中允许存在没有附加至任何实体上的数据项。 二、新建数据项 1)使用“Model”---> Data Items 菜单,在打开的窗口中显示已有的数据项的列表,点击 “Add a Row”按钮,创建一个新数据项,如图所示 ![]() 2)当然您可以继续设置具体数据项的Code、DataType、Length等等信息。这里就不再详细说明了。 三、数据项的唯一性代码选项和重用选项 使用Tools--->Model Options->Model Settings。在Data Item组框中定义数据项的唯一性代码选项(Unique Code)与重用选项(Allow Reuse)。 注意: 如果选择Unique Code复选框 ,每个数据项在同一个命名空间有唯一的代码,而选择Allow reuse ,一个数据项可以充当多个实体的属性。 ![]() 四、在实体中添加数据项 1)双击一个实体符号,打开该实体的属性窗口。 2)单击Attributes选项卡,打开如下图所示窗口 ![]() 注意: Add a DataItem 与 Reuse a DataItem的区别在于 Add a DataItem 情况下,选择一个已经存在的数据项,系统会自动复制所选择的数据项。如果您设置了UniqueCode选项,那系统在复制过程中,新数据项的Code会自动生成一个唯一的号码,否则与所选择的数据项完全一致。 Reuse a DataItem情况下,只引用不新增,就是引用那些已经存在的数据项,作为新实体的数据项。 PowerDesigner教程四 概念数据模型目标: 3)选择"Attributes"选项卡,再点击“Add Attributes”工具,弹出如图所示窗口,选择某个属性作为标识符就行了。 PowerDesigner教程三 概念数据模型目标: 本文主要介绍属性的标准检查约束、如何定义属性的附加检查。 一、定义属性的标准检查约束 标准检查约束是一组确保属性有效的表达式。在实体属性的特性窗口,打开如图所示的检查选项卡。 ![]() 在这个选项卡可以定义属性的标准检查约束,窗口中每项的参数的含义,如下
二、定义属性的附加检查 当Standard checks 或Rules 不能满足检查的要求时,可以在Additional Checks选项卡的Server子页上,通过SQL语句中使用%MINMAX%、%LISTVAL%、%RULES%、%UPPER%、%LOWER% 几个变量来定义Standard和Rule,如图所示 ![]() %MINMAX%、%LISTVAL%、%UPPER%、%LOWER% 在Standard Check中定义的Minimum 和Maximum、List values 、uppervalues、lowervalues %RULES% 在Rules特性窗口Expression选项卡中定义的有效性规则表达式 PowerDesigner教程二 概念数据模型目标: 本文主要介绍PowerDesigner概念数据模型以及实体、属性创建。 一、新建概念数据模型 1)选择File-->New,弹出如图所示对话框,选择CDM模型(即概念数据模型)建立模型。 ![]() 2)完成概念数据模型的创建。以下图示,对当前的工作空间进行简单介绍。(以后再更详细说明) ![]() 3)选择新增的CDM模型,右击,在弹出的菜单中选择“Properties”属性项,弹出如图所示对话框。在“General”标签里可以输入所建模型的名称、代码、描述、创建者、版本以及默认的图表等等信息。在“Notes”标签里可以输入相关描述及说明信息。当然再有更多的标签,可以点击 "More>>"按钮,这里就不再进行详细解释。 ![]() 二、创建新实体 1)在CDM的图形窗口中,单击工具选项版上的Entity工具,再单击图形窗口的空白处,在单击的位置就出现一个实体符号。点击Pointer工具或右击鼠标,释放Entitiy工具。如图所示 ![]() 2)双击刚创建的实体符号,打开下列图标窗口,在此窗口“General”标签中可以输入实体的名称、代码、描述等信息。 ![]() 三、添加实体属性 1)在上述窗口的“Attribute”选项标签上可以添加属性,如下图所示。 ![]() 注意: 数据项中的“添加属性”和“重用已有数据项”这两项功能与模型中Data Item的Unique code 和Allow reuse选项有关。 P列表示该属性是否为主标识符;D列表示该属性是否在图形窗口中显示;M列表示该属性是否为强制的,即该列是否为空值。 如果一个实体属性为强制的,那么, 这个属性在每条记录中都必须被赋值,不能为空。 2)在上图所示窗口中,点击插入属性按钮,弹出属性对话框,如下图所示。 注意:这里涉及到域的概念,即一种标准的数据结构,它可应用至数据项或实体的属性上。在以下的教程中将另立章节详细说明。 PowerDesigner教程一 概念数据模型一、概念数据模型概述
数据模型是现实世界中数据特征的抽象。数据模型应该满足三个方面的要求: 1)能够比较真实地模拟现实世界 2)容易为人所理解 3)便于计算机实现 概念数据模型也称信息模型,它以实体-联系(Entity-RelationShip,简称E-R)理论为基础,并对这一理论进行了扩充。它从用户的观点出发对信息进行建模,主要用于数据库的概念级设计。
实体集(Entity Set)是具体相同类型及相同性质实体的集合。例如学校所有学生的集合可定义为“学生”实体集,“学生”实体集中的每个实体均具有学号、姓名、性别、出生年月、所在系别、入学年份等性质。 mysql中一些常用的操作1.添加管理员: 5.显示当前操作 6 备份和恢复 如果要备份某个数据库中某个表为 /usr/local/mysql/bin/mysqldump -uroot -p linux table > /root/linux.sql 7 查找某个表 show tables like '%table%'; 8 显示创建某个表的语句 show create table table_name; 9 导入本地文件到pet数据库中 LOAD DATA INFILE '/work/document/database/pet.txt' INTO TABLE pet; 10 清空表中数据保留字段truncate pet; 11 其他 select name,birth,curdate(), (year (curdate())-year(birth))-(right(curdate(),5)<right(birth,5)) as age from pet; 设计自己的Annotation入门与实践第一部分:了解一下java1.5起默认的三个annotation类型: 一个是@Override:只能用在方法之上的,用来告诉别人这一个方法是改写父类的。 一个是@Deprecated:建议别人不要使用旧的API的时候用的,编译的时候会用产生警告信息,可以设定在程序里的所有的元素上. 一个是@SuppressWarnings:这一个类型可以来暂时把一些警告信息消息关闭. 如果不清楚上面三个类型的具体用法,各位可以baidu或google一下的,很简单的。 第二部分:讲一下annotation的概念先,再来讲一下怎样设计自己的annotation. 首先在jdk自带的java.lang.annotation包里,打开如下几个源文件: 1、源文件Target.java
其中的@interface是一个关键字,在设计annotations的时候必须把一个类型定义为@interface,而不能用class或interface关键字(会不会觉得sun有点吝啬,偏偏搞得与interface这么像). 2、源文件Retention.java
看到这里,大家可能都模糊了,都不知道在说什么,别急,往下看一下. 在上面的文件都用到了RetentionPolicy,ElementType这两个字段,你可能就会猜到这是两个java文件.的确,这两个文件的源代码如下: 3、源文件RetentionPolicy.java 这是一个enum类型,共有三个值,分别是SOURCE,CLASS 和 RUNTIME. SOURCE代表的是这个Annotation类型的信息只会保留在程序源码里,源码如果经过了编译之后,Annotation的数据就会消失,并不会保留在编译好的.class文件里面。 ClASS的意思是这个Annotation类型的信息保留在程序源码里,同时也会保留在编译好的.class文件里面,在执行的时候,并不会把这一些信息加载到虚拟机(JVM)中去.注意一下,当你没有设定一个Annotation类型的Retention值时,系统默认值是CLASS. 第三个,是RUNTIME,表示在源码、编译好的.class文件中保留信息,在执行的时候会把这一些信息加载到JVM中去的. 举一个例子,如@Override里面的Retention设为SOURCE,编译成功了就不要这一些检查的信息;相反,@Deprecated里面的 Retention设为RUNTIME,表示除了在编译时会警告我们使用了哪个被Deprecated的方法,在执行的时候也可以查出该方法是否被 Deprecated. 4、源文件ElementType.java
@Target里面的ElementType是用来指定Annotation类型可以用在哪一些元素上的.说明一下:TYPE(类型), FIELD(属性), METHOD(方法), PARAMETER(参数), CONSTRUCTOR(构造函数),LOCAL_VARIABLE(局部变量), ANNOTATION_TYPE,PACKAGE(包),其中的TYPE(类型)是指可以用在Class,Interface,Enum和 Annotation类型上. 另外,从1的源代码可以看出,@Target自己也用了自己来声明自己,只能用在ANNOTATION_TYPE之上. 如果一个Annotation类型没有指明@Target使用在哪些元素上,那么它可以使用在任何元素之上,这里的元素指的是上面的八种类型. 举几个正确的例子: @Target(ElementType.METHOD) @Target(value=ElementType.METHOD) @Target(ElementType.METHOD,ElementType.CONSTRUCTOR) 具体参考一下javadoc文档 上面一下1和2的源文件,它们都使用了@Documented,@Documented的目的就是让这一个Annotation类型的信息能够显示在javaAPI说明文档上;没有添加的话,使用javadoc生成API文档的时候就会找不到这一个类型生成的信息. 另外一点,如果需要把Annotation的数据继承给子类,那么就会用到@Inherited这一个Annotation类型. 第三部分:下面讲的设计一个最简单的Annotation例子,这一例子共用四个文件; 1、Description.java
说明:所有的Annotation会自动继承java.lang.annotation这一个接口,所以不能再去继承别的类或是接口. 最重要的一点,Annotation类型里面的参数该怎么设定: 第一,只能用public或默认(default)这两个访问权修饰.例如,String value();这里把方法设为defaul默认类型. 第二,参数成员只能用基本类型byte,short,char,int,long,float,double,boolean八种基本数据类型和 String,Enum,Class,annotations等数据类型,以及这一些类型的数组.例如,String value();这里的参数成员就为String. 第三,如果只有一个参数成员,最好把参数名称设为"value",后加小括号.例:上面的例子就只有一个参数成员. 2、Name.java
3、JavaEyer.java
4、最后,写一个可以运行提取JavaEyer信息的类TestAnnotation
5、运行结果: 描述:javaeye,做最棒的软件开发交流社区 ----------------- 创始人:robbin 创建的社区:javaEye 创始人:江南白衣 创建的社区:springside 后续
如何控制一个annotation里的某些属性可以填可以不填,难道都是必填?
不是必填的,我举一个例子,可以更清楚一些,在把上面的Name.java改为 java 代码
build.xml-ANT文件详解Ant的概念 make这个命令。当编译Linux内核及一些软件的源程序时,经常要用这个命令。Make命令其实就 是一个项目管理工具,而Ant所实现功能与此类似。像make,gnumake和nmake这些编译工具都有 一定的缺陷,但是Ant却克服了这些工具的缺陷。最初Ant开发者在开发跨平台的应用时,用样也 是基于这些缺陷对Ant做了更好的设计。 Ant 与 makefile 只是我在Tab前面加了一个空格,所以我的命令就不能执行”。有一些工具在一定程度上解决了 这个问题,但还是有很多其他的问题。Ant则与一般基于命令的工具有所不同,它是Java类的扩 展。Ant运行需要的XML格式的文件不是Shell命令文件。它是由一个Project组成的,而一个 Project又可分成可多target,target再细分又分成很多task,每一个task都是通过一个实现特 定接口的java类来完成的。 Ant的优点 Ant是Apache软件基金会JAKARTA目录中的一个子项目,它有以下的优点。 Ant通过调用target树,就可以执行各种task。每个task实现了特定接口对象。由于Ant构建文件 时XML格式的文件,所以和容易维护和书写,而且结构很清晰。 境中去。 Ant 开发 Ant的构建文件 中每个人使用。Ant构建文件默认命名为build.xml,也可以取其他的名字。只不过在运行的时候 把这个命名当作参数传给Ant。构建文件可以放在任何的位置。一般做法是放在项目顶层目录中 ,这样可以保持项目的简洁和清晰。下面是一个典型的项目层次结构。 义很多目标(target元素),这些目标之间可以有依赖关系。当执行这类目标时,需要执行他们所 依赖的目标。 用所定义的任务。任务定义了Ant实际执行的命令。Ant中的任务可以为3类。 就如代码中所示,其各个属性的含义分别如下。 自己的构建文件。 2.<target>标签 如,有一个target用于编译程序,另一个target用于声称可执行文件。在生成可执行文件之前必 须先编译该文件,因策可执行文件的target依赖于编译程序的target。Target的所有属性如下。 每个target。在执行之前,首先需要执行它所依赖的target。程序中的名为run的target的 depends属性compile,而名为compile的target的depends属性是prepare,所以这几个target执 行的顺序是prepare->compile->run。 会被执行。 3.<mkdir>标签 4<jar>标签 5.<javac标签> 6.<java>标签 7.<delete>标签 8.<copy>标签 Ant的数据类型 org.apache.tool.ant.types包中。下面镜简单介绍构建文件中一些常用的数据类型。 1. argument 类型 务均可接受嵌套<arg>元素,可以为各自的过程调用指定参数。以下是<arg>的所有属性。 。 2.ervironment 类型 统命令,<env>元素可以接受以下属性。 3.filelist类型 存在的文件。以下是其所有的属性。 4.fileset类型 隐式的fileset,这说明他们支持所有的fileset属性和嵌套元素。以下为fileset 的属性列表。 值为true. 5.patternset 类型 <patternset>支持4个属性:includes excludex includexfile 和 excludesfile,与fileset相 同。Patternset 还允许以下嵌套元素:include,exclude,includefile 和 excludesfile. 6.filterset 类型 7.Path类型 的各项用分号或冒号隔开。在构建的时候,此分隔符将代替当前平台中所有的路径分隔符,其拥 有的属性如下。 8.mapper类型 内置mapper的类型。
Ant.若没有指定任何参数,Ant会在当前目录下查询build.xml文件。如果找到了就用该文件作为 构建文件。如果使用了 –find 选项,Ant 就会在上级目录中找构建文件,直至到达文件系统得 跟目录。如果构建文件的名字不是build.xml ,则Ant运行的时候就可以使用 –buildfile file ,这里file 指定了要使用的构建文件的名称,示例如下: Ant –buildfile test.xml eclipseGH DM R properties插件 开发java程序的时候要编辑properties文件,里面要用到中文,就要使用java里面的native2ascii工具来进行转化,把gbk的编码转成unicode编码,可以手工运行native2ascii文件进行编辑,或者使用ant里面的相关任务来进行操作.但是这样都比较麻烦,并且转化以后的文件用编辑器打开以后就不能直接看到中文,要进行修改比较麻烦.
eclipse下面有一些工具可以帮助进行操作,jinto http://www.guh-software.de/jinto_en.html 和propertieseditor http://propedit.sourceforge.jp/index_en.html 两个都可以. 其中properties editor好像是日本人开发的,可以支持jbuider,eclipse,standlone,不考虑使用了. jinto是eclipse下面的插件,可以同时把多个properties文件同时显示出来,对网页的国际化开发比较方便,功能比较适合,一直使用他. 好东西大家分享:eclipse下面的properties插件 关于 LOG4J 级别和显示配置使用LOG4J : 可以在console中打印LOG信息.可设置LOG级别和显示的配置.
至少需要一个log4j.properties文件,位于SRC根下;
#log4j.properties:
#以下部分是log4j基本设置
#如rootLogger代表logger根,即默认级别; 其它设置为console显示方式的内容
log4j.rootLogger = WARN, console
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.layout = org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern = %d [%t] %-5p %c - %m%n #以下部分是用于特别指定某块程序的log级别
#log4j.logger后面部分用来指定特定的程序块,即包名. 如log4j.logger.org = INFO,即设置org整个包为INFO级别
log4j.logger.org = INFO
log4j.logger.org.hibernate = INFO log4j.logger.gboxs = DEBUG log4j.logger.test = DEBUG
下面的文件log4j.jsp,位于WEBCONTENT目录下,可用于在程序运行时临时修改LOG级别.
只用打开该页面,并作相应选择即可.但不会改变log4j.properties内容.即不影响重启后系统设置.
#log4j.jsp :
<% // org.apache.log4j.Logger tmp = org.apache.log4j.Logger .getRootLogger(); out.println("root level " + tmp.getLevel()); String set = request.getParameter("set"); if (set != null) { String logger = request.getParameter("logger"); if (logger != null) { org.apache.log4j.Logger log = org.apache.log4j.Logger .getLogger(logger); org.apache.log4j.Level l = log.getLevel(); out.println("<br/>"); out.println(logger + " old level " + l); String i = request.getParameter("level"); if ("1".equals(i)) //log.setLevel(Level.TRACE); ; else if ("2".equals(i)) log.setLevel(org.apache.log4j.Level.DEBUG); else if ("3".equals(i)) log.setLevel(org.apache.log4j.Level.INFO); else if ("4".equals(i)) log.setLevel(org.apache.log4j.Level.WARN); else if ("5".equals(i)) log.setLevel(org.apache.log4j.Level.ERROR); else if ("6".equals(i)) log.setLevel(org.apache.log4j.Level.ALL); } } String show = request.getParameter("show"); if (show != null) { String logger = request.getParameter("logger"); if (logger != null) { org.apache.log4j.Logger log = org.apache.log4j.Logger .getLogger(logger); org.apache.log4j.Level l = log.getLevel(); out.println("level " + l); } }
application.log("log4j has changed"); %> <html> <body> <form method="Post"><input value="org.apache.struts" name="logger" size="60" /> <select name="level"> <option value="2">trace</option> <option value="2" selected="selected">debug</option> <option value="3">info</option> <option value="4">warn</option> <option value="5">error</option> <option value="6">all</option> </select> <input type="submit" value="set" name="set" /> <input type="submit" value="show" name="show" /> <p /><select name="pre" onchange="if(this.value > 0)this.form.logger.value = (this.options[this.value].text);"> <option value="0">--select--</option> <option value="1">org.apache.commons.beanutils.BeanUtils</option> <option value="2">org.apache.struts</option> <option value="3">org.hibernate.type</option> <option value="4">org.springframework</option> <option value="5">org.hibernate</option> <option value="6">org.hibernate.jdbc</option> <option value="7">org.hibernate.type</option> <option value="8">org.springframework.orm</option> <option value="9">org.springframework.transaction</option> <option value="10">gboxs</option> </select> </form> </body> </html> 关于鼠标右键的输出源码将以下两个文件存到 D:\ 下.双击运行test.reg文件即可!
##d:\test.html:
<script language="javascript">
function obj(o) { if(typeof(o) != 'object')return o; var inf = "{"; var a; for(var i in o) { try{ a = o[i]; if(typeof(a) == "array") { inf += i + " = {" + obj(a) + "},"; } else { inf += i + " = " + a + ","; } }catch(e) { inf += i + " !cantaccess, "; } } inf += "}" return inf; } var win = external.menuArguments;
var ev= win.event; var src = ev.srcElement; var level = 0; if(ev.ctrlKey) { level = new Number(win.prompt("Trace Level","1")); } var target = src; for (var i = 0;i < level;i ++) { if(target.parentNode)target = target.parentNode; } var infostr=target.outerHTML; if(target.style){ infostr += "\n"; for(var i in target.style) { if(target.style[i] != '') { infostr += i + "=" + target.style[i] + "\n"; } } } if(!confirm(infostr)){ if(confirm("open in new window?")) { try{ var newWin = window.open("about:blank"); if(newWin == null){ newWin= win; } newWin.document.write("<pre id=info>"); newWin.info.innerText = (infostr); newWin.document.write("</pre>"); }catch(ee){ alert(obj(ee)); } } } </script> ##test.reg:
Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\test&w]
MAVEN 基础使用 maven是一个源代码开放的JAVA项目管理工具,在其支持网站(http://maven.apache.org)上可以上载到最新的软件包,MAVEN需要JDK的支持。在安装MAVEN之前请确认JDK已经安装,并设置好了JAVA_HOME和CLASSPATH这些环境变量.
把下载的MAVEN解压到D:\MAVEN目录后,设置MAVEN_HOME=D:\MAVEN,同时,在PATH中加上D:\MAVEN\BIN,然后执行 >maven -v 来验证是否正确.
现在就可以把项目纳入MAVEN的管理之下了.假设项目的根目录是D:\PROJECT\,其中源代码在D:\PROJECT\SRC\JAVA\目录之下.
MAVEN使用POM来对项目进行表示,而用于描述POM的XML文件则由三个主要部分组成:
1\ 项目管理部分
包括项目的组织,开发人员名单,源代码位置等信息;
2\ 项目关联部分
包括有关项目相关性的所有信息;
3\ 项目构建部分
包含项目构建过程及要在构建中生成的项目报告等信息;
要使用MAVEN来管理我们的这个项目,需要在项目的根目录D:\PROJECT\下创建一个名为project.xml的文件,其完整内容如下所示:
project.xml
<project>
<id>linuxgam</id>
<build>
<sourceDirectory>
${basedir}/src/java
</sourceDirectory>
</build>
</project>
在用MAVEN进行项目构建管理时所有的行为都是基于目标(GOAL)的,MAVEN中的GOAL类似于ANT中的TARGET,指的是在某种情况下应该执行的动作集合.
D:\PROJECT>MAVEN JAVA:COMPILE
对项目进行编译,只要在项目的根目录下执行MAVEN预定义的JAVA:COMPILE目标就可以了
D:\PROJECT>MAVEN JAR
将编译生成的.CLASS文件打成JAR包,并保存在D:\PROJECT\TARGET目录下 D:\PROJECT>MAVEN CLEAN
清除编译结果(CLASS JAR) 需要注意的是,在第一次执行MAVEN中预定义的目标时,它将首先自动从网络上下载一些依赖的JAR包,然后才能开始政党的编译过程。编译完成后,MAVEN会将生成的.CLASS文件保存到D:\PROJECT\TARGET\CLASSES\目录下.
而文件名则由PROJECT.XML中的id和currentVersion元素共同决定. JAVA:COMPILE \ JAR \ CLEAN 是使用MAVEN管理JAVA项目时最常用的三个目标,MAVEN中预定义的几碍个目标基本上能够满足绝大多数应用场合的需要.为了能更好的管理这些目标,MAVEN引入了插件概念,几乎所有的MAVEN功能都是以插件的形式提供的,而MAVEN本身可以看成是一个用来对这些插件进行管理的内核. 在了解了MAVEN的一些基本功能之后,下面再来看看MAVEN是如何将第三方工具缝的集成到项目构建过程中的,我们选择JUNIT测试工具作为例子.首先,需要在PROJECT.XML中添加UNITTESTSOURCEDIRECTORY元素:
project.xml
<project> <id>linuxgam</id> <currentVersion>1.0</currentVersion> <dependencies> <dependency> <groupId>junit</groupId> <artfactId>junit</artfactId> <version>3.8.1</version> <dependency> </dependencies> <build> <sourceDirectory> ${basedir}/src/java </sourceDirectory> <unitTestSourceDirectory> ${basedir}/src/test </unitTestSourceDirectory> <unitTest/> </build> </project> 之后,如果要进行单元测试,只需要在项目根目录下执行MAVEN预定义的TEST目标就可以了 D:\PROJECT>MAVEN TEST
要对配置的JUNIT部分进行单元测试 在PROJECT.XML中添加reports元素:
project.xml
<project> <id>linuxgam</id> <currentVersion>1.0</currentVersion> <dependencies> <dependency> <groupId>junit</groupId> <artfactId>junit</artfactId> <version>3.8.1</version> <dependency> </dependencies> <build> <sourceDirectory> ${basedir}/src/java </sourceDirectory> <unitTestSourceDirectory> ${basedir}/src/test </unitTestSourceDirectory> <unitTest/> </build> <reports> <report>maven-changelog-plugin</report> <report>maven-file-activity-plugin</report> <report>maven-developer-activity-plugin</report> 然后在根目录下执行SITE命令,MAVEN就会在D:\PROJECT\TARGET\DOCS\目录下为项目生成相应的文档,打开该目录下的INDEX.HTML,你会发现MAVEN已经自动生成项目信息,邮件列表,更改记录等文档.
D:\PROJECT>MAVEN SITE
MAVEN提出一个叫生命周期的定义。
每个阶段会包含此前所有阶段的操作。
用户可以根据自己的需要决定用MAVEN执行哪些操作。从而选用某个阶段对应的命令。 |
|
|