什么是Ant
一种基于Java的构建工具,可以用于自动化的building,packaging,andinstallingJavaapplications,与Linux中的makefile实现同样的功能,配置文件是以XML形式的。
安装Ant?
下载Ant的二进制包:
http://ant.apache.org/bindownload.cgi
设置ANT_HOME主目录环境变量
设置Path环境变量$ANT_HOME/bin
确定JAVA_HOME环境变量指定到JDK
运行Ant
在命令行输入“ant”
Ant则自动在当前目录下寻找build.xml文件以便运行
可以在命令行输入“ant–buildfilebuild.xml”指定一个特定的buildfile.xml用于运行
Ant的配置文件build.xml举例:
<projectname="MyProject"default="dist"basedir=".">
<propertyname="src"location="src"/>
<propertyname="build"location="build"/>
<propertyname="dist"location="dist"/>
<targetname="init">
<tstamp/>
<mkdirdir="${build}"/>
</target>
<targetname="compile"depends="init">
<javacsrcdir="${src}"destdir="${build}"/>
</target>
<targetname="dist"depends="compile">
<mkdirdir="${dist}/lib"/>
<jarjarfile="${dist}/lib/MyProject-${DSTAMP}.jar"basedir="${build}"/>
</target>
<targetname="clean">
<deletedir="${build}"/>
<deletedir="${dist}"/>
</target>
</project>
每个Ant配置文件只包含一个project标签和至少一个target标签
Project标签设置基本的项目属性,它有三个properties:
-name
-defaulttarget
-basedir
例如:<projectname=“MyProject”default=“build”basedir=“.”>
Target是Ant中的一个构建模块
每个target包含一些需要Ant做的task(s)
每个project标签必须有一个默认的Target
Targets的总体结构如下:
<targetname="A"/>
<targetname="B"depends="A"/>
<targetname="C"depends="B"/>
<targetname="D"depends="C,B,A"/>
每个target包含一个或多个tasks
Task是一段可执行的Java代码(e.g.javac,jar,etc)
Tasks是Ant中的真正“build”工作的模块
Ant有核心任务(builtin)和创建自定制任务的能力
例子:
<targetname="prepare"depends="init“>
<mkdirdir="${build}"/>
</target>
<targetname="build"depends="copy">
<javacsrcdir="src"destdir="${build}">
<includename="**/*.java"/>
</javac>
</target>
添加目录操作
<targetname="init">
<mkdirdir="${dist.dir}"/>
<mkdirdir="${dist.classes.dir}"/>
<mkdirdir="${dist.webapps.dir}"/>
</target>
编译java文件操作
<targetname="compile">
<javacsrcdir="${dist.dir}"destdir="${dist.classes.dir}"debug="true"encoding="GBK">
<classpathrefid="classpath"/>
</javac>
<jardestfile="${dist.classes.dir}/lin/app.jar"basedir="${dist.classes.dir}"/>
</target>
打Jar包操作
<targetname="jar">
<jardestfile="${dist}/lib/app.jar">
<filesetdir="${build}/classes"excludes="**/Test.class"/>
<filesetdir="${src}/resources"/>
</jar>
</target>
复制文件操作
<targetname=“copy">
<copytodir="${dist.webapps.dir}/WEB-INF/lib"overwrite="true"flatten="true">
<filesetdir="${lib.dir}">
<includename="*.jar"/>
<excludename="j2ee.jar"/>
</fileset>
</copy>
</target>
删除操作
<targetname="clean">
<deletedir="${dest.dir}"/>
<deletedir="${dest2.dir}"/>
</target>
写自定制的任务
创建一个从继承org.apache.tools.ant.Task的Java类
对每一个属性,写一个publicvoid的setter方法并带一个参数
写一个publicvoidexecute()可以抛出BuildException异常但没有参数的方法,该方法实现自定制的任务
用于设置build.xml的properties:
例如:
<propertyname=“src”value=“/home/src”/>
可以在配置文件任何地方使用${src}来表示/home/src目录
只要由<property>指定的值,Ant可以提供任何访问
Ant提供了方法用来设置各种环境变量,诸如PATHandCLASSPATH.
设置CLASSPATH的例子:
<classpath>
<pathelementpath="${classpath}"/>
<pathelementlocation="lib/helper.jar"/>
</classpath>
命令行参数
-buildfilebuildfile–指定要使用的build文件
targetname–指定要运行的target(代替执行默认的target)
-verbose,-quiet,-debug–控制Ant输出的日志信息
-loggerclassname–AllowsusertospecifytheirownclassesforloggingAntevents
使用Ant自动化部署数据库
说明:
1
createDB_MySQL
创建用于添加表的数据库
2
createTAbles_MySQL
创建用于操作/测试的表
3
dropDB_MySQL
丢弃数据库
注意:
需要提供四个sql脚本文件
sample_project.sql
employees.sql
project.sql
timetable.sql
设置基本的buildfile.xml属性
<projectname="Databasecreation"default="createTables_MySQL"basedir=".">
<!--可以使用一个property文件,如<propertyfile="${basedir}/build.properties"/>-->
<propertyname="sql.dirver"value="org.git.mm.mysql.Driver"/>
<propertyname="sql.url"value="jdbc:mysql://localhost/sample_project"/>
<propertyname="sql.user"value=""/>
<propertyname="sql.pass"value=""/>
<targetname="createDB_MySQL">
<sqldirver="${sql.driver}"
url="${sql.url}"
userid="${sql.user}"
password="${sql.pass}"
classpath="mysql-connector-java-3.0.9-stable-bin.jar"
src="sample_project.sql"/>
</target>
<targetname="createTables_MySQL">
<sqldirver="${sql.driver}"url="${sql.url}"userid="${sql.user}"password="${sql.pass}">
<classpath>
<pathelementlocation="mysql-connector-java-3.0.9-stable-bin.jar"/>
</classpath>
usesample_project;
<transactionsrc="employees.sql"/>
<transactionsrc="project.sql"/>
<transactionsrc="timetable.sql"/>
</sql>
</target>
<targetname="dropDB_MySQL">
<inputmessage="Doyoureallywanttodeletethistable(y/n)?"validargs="y,n"addproperty="do.delete"/>
<conditionproperty="do.abort">
<equalsarg1="n"arg2="${do.delete}"/>
</condition>
<failif="do.abort">Buildabortedbyuser.</fail>
<sqldirver="${sql.driver}"url="${sql.url}"userid="${sql.user}"password="${sql.pass}">
<classpath>
<pathelementlocation="mysql-connector-java-3.0.9-stable-bin.jar"/>
</classpath>
dropdatabasesmaple_project;
</sql>
</target>
</project>
我们可以在编写好需要持久化的类的映射文件*.hbm.xml后,使用org.hibernate.tool.hbm2ddl.SchemaExport来自动建立数据库表格,假设我们的User.hbm.xml如下:
User.hbm.xml
<hibernate-mapping>
<classname=“com.cstp.User"table="user">
<idname="id"column="id"type="java.lang.Integer">
<generatorclass="native"/>
</id>
<propertyname="name"column="name"type="java.lang.String"/>
<propertyname=“age"column=“age"type="java.lang.integer"/>
</class>
</hibernate-mapping>
编写如下程序从映射文件生成数据库表格
HbmtoTable.java
packagecom.cstp;
importorg.hibernate.cfg.Configuation;
importorg.hibernate.tool.hbm2ddl.SchemaExport;
publicclassHbmToTable{
publicstaticvoidmain(String[]args){
Configurationconfig=newConfiguration().configure();
System.out.println("Creatingtables");
SchemaExportschemaExport=newSchemaExport(config);
schemaExport.create(true,true);
}
}
方法一:
借助MyEclipse的Hibernate逆向工程方案
首先在数据创建好数据库和对应表格
注意:表格之间的主外键依赖关系一定要设置对
其次,在MyEclipse中利用逆向工程,直接生成对应的持久化类和对应的Hibernate映射文件
注意:生成的持久化类需要稍微修改,以便符合Hibernate的要求
方法二:
借助Middlegen-Hibernate工具
首先下载Middlegen-Hibernate,下载后将其解压缩
其次,在数据库创建好对应的表格
然后,进入Middlegen-Hibernate解压缩后的config/database目录中,开启mysql.xml,修改当中的数据库配置相关信息
最后在Middlegen-Hibernate目录下,开启Ant的构建文件,修改build.xml文件
第一个需要设定的是所使用的数据库配置文件,改为mysql.xml
第二个是设定应用程序名
第三个是设定自动产生文件的输出目录
第四个是设定你的package名称
其它可以不变
修改完成后,进入Middlegen-Hibernate目录下,执行Ant构建,如果成功,出现一个窗口,进行进一步的设置
设置完成后,点击窗口的generate按钮,即可产生数据库表格对应的类映射文件
开启mysql.xml
<!--=========================================================-->
<!--antproperties/targetsformysql-->
<!--note:thisisnotaproperxmlfile(thereisnorootelement)-->
<!--itisintendedtobeimportedfroma*real*xmlfile-->
<!--==========================================================-->
<propertyname="database.script.file"value="${src.dir}/sql/${name}-mysql.sql"/>
<propertyname="database.driver.file"value="${lib.dir}/mysql-connector-java-3.0.14-production-bin.jar"/>
<propertyname="database.driver.classpath"value="${database.driver.file}"/>
text-alig