什么是Ant
一种基于Java的构建工具,可以用于自动化的building, packaging, and installing Java applications,与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 –buildfile build.xml” 指定一个特定的buildfile.xml用于运行
Ant的配置文件build.xml举例:
<project name="MyProject" default="dist" basedir=".">
<property name="src" location="src"/>
<property name="build" location="build"/>
<property name="dist" location="dist"/>
<target name="init">
<tstamp/>
<mkdir dir="${build}"/>
</target>
<target name="compile" depends="init" >
<javac srcdir="${src}" destdir="${build}"/>
</target>
<target name="dist" depends="compile" >
<mkdir dir="${dist}/lib"/>
<jar jarfile="${dist}/lib/MyProject-${DSTAMP}.jar" basedir="${build}"/>
</target>
<target name="clean" >
<delete dir="${build}"/>
<delete dir="${dist}"/>
</target>
</project>
每个Ant配置文件只包含一个project标签和至少一个target标签
Project 标签设置基本的项目属性,它有三个properties:
- name
- default target
- basedir
例如: <project name=“MyProject” default=“build” basedir=“.”>
Target 是Ant中的一个构建模块
每个target包含一些需要Ant做的 task(s)
每个project标签必须有一个默认的Target
Targets的总体结构如下:
<target name="A"/>
<target name="B" depends="A"/>
<target name="C" depends="B"/>
<target name="D" depends="C,B,A"/>
每个target 包含一个或多个 tasks
Task 是一段可执行的Java代码 (e.g. javac, jar, etc)
Tasks 是Ant中的真正 “build” 工作的模块
Ant 有核心任务 (built in) 和创建自定制任务的能力
例子:
<target name="prepare" depends="init“ >
<mkdir dir="${build}" />
</target>
<target name="build" depends="copy" >
<javac srcdir="src" destdir="${build}">
<include name="**/*.java" />
</javac>
</target>
添加目录操作
<target name="init">
<mkdir dir="${dist.dir}"/>
<mkdir dir="${dist.classes.dir}"/>
<mkdir dir="${dist.webapps.dir}"/>
</target>
编译java文件操作
<target name="compile">
<javac srcdir="${dist.dir}" destdir="${dist.classes.dir}" debug="true" encoding="GBK">
<classpath refid="classpath"/>
</javac>
<jar destfile="${dist.classes.dir}/lin/app.jar" basedir="${dist.classes.dir}"/>
</target>
打Jar包操作
<target name="jar">
<jar destfile="${dist}/lib/app.jar">
<fileset dir="${build}/classes" excludes="**/Test.class"/>
<fileset dir="${src}/resources"/>
</jar>
</target>
复制文件操作
<target name=“copy">
<copy todir="${dist.webapps.dir}/WEB-INF/lib" overwrite="true" flatten="true">
<fileset dir="${lib.dir}">
<include name="*.jar"/>
<exclude name="j2ee.jar"/>
</fileset>
</copy>
</target>
删除操作
<target name="clean">
<delete dir="${dest.dir}"/>
<delete dir="${dest2.dir}"/>
</target>
写自定制的任务
创建一个从继承 org.apache.tools.ant.Task 的Java类
对每一个属性, 写一个 public void 的setter方法并带一个参数
写一个 public void execute() 可以抛出BuildException异常但没有参数的方法, 该方法实现自定制的任务
用于设置build.xml的 properties:
例如:
<property name=“src” value=“/home/src”/>
可以在配置文件任何地方使用 ${src} 来表示/home/src目录
只要由<property> 指定的值,Ant 可以提供任何访问
Ant 提供了方法用来设置各种环境变量,诸如PATH and CLASSPATH.
设置 CLASSPATH的例子:
<classpath>
<pathelement path="${classpath}"/>
<pathelement location="lib/helper.jar"/>
</classpath>
命令行参数
-buildfile buildfile – 指定要使用的build文件
targetname – 指定要运行的target (代替执行默认的 target)
-verbose, -quiet, -debug – 控制Ant输出的日志信息
-logger classname – Allows user to specify their own classes for logging Ant events
使用Ant自动化部署数据库
说明:
1
createDB_MySQL
创建用于添加表的数据库
2
createTAbles_MySQL
创建用于操作/测试的表
3
dropDB_MySQL
丢弃数据库
注意:
需要提供四个sql脚本文件
sample_project.sql
employees.sql
project.sql
timetable.sql
设置基本的buildfile.xml属性
<project name="Database creation" default="createTables_MySQL" basedir=".">
<!-- 可以使用一个property文件,如<property file = "${basedir} /build.properties"/> -->
<property name="sql.dirver" value="org.git.mm.mysql.Driver"/>
<property name="sql.url" value="jdbc:mysql://localhost/sample_project"/>
<property name="sql.user" value=""/>
<property name="sql.pass" value=""/>
<target name="createDB_MySQL">
<sql dirver="${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>
<target name="createTables_MySQL">
<sql dirver="${sql.driver}" url="${sql.url}" userid="${sql.user}" password="${sql.pass}">
<classpath>
<pathelement location="mysql-connector-java-3.0.9-stable-bin.jar"/>
</classpath>
use sample_project;
<transaction src="employees.sql"/>
<transaction src="project.sql"/>
<transaction src="timetable.sql"/>
</sql>
</target>
<target name="dropDB_MySQL">
<input message="Do you really want to delete this table (y/n)?" validargs="y,n" addproperty="do.delete"/>
<condition property="do.abort">
<equals arg1="n" arg2="${do.delete}"/>
</condition>
<fail if="do.abort">Build aborted by user.</fail>
<sql dirver="${sql.driver}" url="${sql.url}" userid="${sql.user}" password="${sql.pass}">
<classpath>
<pathelement location="mysql-connector-java-3.0.9-stable-bin.jar"/>
</classpath>
drop database smaple_project;
</sql>
</target>
</project>
我们可以在编写好需要持久化的类的映射文件*.hbm.xml后,使用org.hibernate.tool.hbm2ddl.SchemaExport来自动建立数据库表格,假设我们的User.hbm.xml如下:
User.hbm.xml
<hibernate-mapping>
<class name=“com.cstp.User" table="user">
<id name="id" column="id" type="java.lang.Integer">
<generator class="native"/>
</id>
<property name="name" column="name" type="java.lang.String"/>
<property name=“age" column=“age" type="java.lang.integer"/>
</class>
</hibernate-mapping>
编写如下程序从映射文件生成数据库表格
HbmtoTable.java
package com.cstp;
import org.hibernate.cfg.Configuation;
import org.hibernate.tool.hbm2ddl.SchemaExport;
public class HbmToTable{
public static void main(String[] args){
Configuration config=new Configuration().configure();
System.out.println("Creating tables");
SchemaExport schemaExport=new SchemaExport(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
<!-- ========================================================= -->
<!-- ant properties/targets for mysql -->
<!-- note: this is not a proper xml file (there is no root element) -->
<!-- it is intended to be imported from a *real* xml file -->
<!--========================================================== -->
<property name="database.script.file" value="${src.dir}/sql/${name}-mysql.sql"/>
<property name="database.driver.file" value="${lib.dir}/mysql-connector-java-3.0.14-production-bin.jar"/>
<property name="database.driver.classpath" value="${database.driver.file}"/>
<property name="database.driver" value="org.gjt.mm.mysql.Driver"/>
<property name="database.url" value="jdbc:mysql://localhost/airline"/>
<property name="database.userid" value=“root"/>
<property name="database.password" value=“123456"/>
<property name="database.schema" value=""/>
<property name="database.catalog" value=""/>
<property name="jboss.datasource.mapping" value="mySQL"/>
修改build.xml文件
<!DOCTYPE project [
<!ENTITY database SYSTEM "file:./config/database/mysql.xml">
<!ENTITY ejb SYSTEM "file:./config/ejb/jboss.xml">
<!--ENTITY ejb SYSTEM "file:./config/ejb/weblogic.xml"-->
<!--ENTITY ejb SYSTEM "file:./config/ejb/mvcsoft.xml"-->
]>