ANT 简介

什么是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"-->

]>

你可能感兴趣的:(数据库,Hibernate,mysql,ant,MyEclipse,Build)