Maven可以包含Ant Script,反過來說,Ant可否使用Maven的dependency repostories呢?It's right。使用Maven Ant Task。

  1. 先自官方網站http://maven.apache.org/ant-tasks/下載最新的maven-ant-tasks-x.y.z.jar檔,x.y.z目前版本是2.1.0。
  2. 將這個Jar檔放進Ant Home目錄下的lib目錄。
  3. 可以在DOS下執行ant -diagnostics查看Ant是否把這個jar納入在class path裡。

  使用Maven Ant Task,其Ant版本需在1.7版以上,藉由maven-ant-tasks-x.y.z.jar,其dependency jar檔所放置的repository位置及設定應與Maven2相同,而在Ant的build.xml如何設定dependency jar,寫法如下(取自O'Reilly的Harnessing Hibernate):

<?xml version="1.0" encoding="UTF-8"?>
<project name="Harnessing Hibernate 3" default="db" basedir="."
    xmlns:artifact="antlib:org.apache.maven.artifact.ant">
    <property name="source.root" value="src"/>
    <property name="class.root" value="classes"/>
    <property name="data.dir" value="data"/>
    <artifact:dependencies pathId="dependency.classpath">
        <dependency groupId="hsqldb" artifactId="hsqldb" version="1.8.0.7"/>
        <dependency groupId="org.hibernate" artifactId="hibernate" version="3.2.7.ga">
            <exclusion groupId="javax.transaction" artifactId="jta"/>
        </dependency>
        <dependency groupId="org.hibernate" artifactId="hibernate-tools" version="3.2.3.GA"/>
        <dependency groupId="org.apache.geronimo.specs" artifactId="geronimo-jta_1.1_spec" version="1.1.1"/>
        <dependency groupId="log4j" artifactId="log4j" version="1.2.15"/>
    </artifact:dependencies>
    <path id="project.class.path">
        <pathelement location="${class.root}"/>
        <path refid="dependency.classpath"/>
    </path>
    <target name="db" description="Runs HSQLDB management UI">
        <java classname="org.hsqldb.util.DatabaseManager" fork="yes">
            <classpath refid="project.class.path"/>
            <arg value="-driver"/>
            <arg value="org.hsqldb.jdbcDriver"/>
            <arg value="-url"/>
            <arg value="jdbc:hsqldb:${data.dir}/music"/>
            <arg value="-user"/>
            <arg value="sa"/>
        </java>
    </target>
</project>

  最重要要有上頭加粗的namespace設定:xmlns:artifact="antlib:org.apache.maven.artifact.ant" ,如此artifact:dependencies的標籤才有作用。之後dependency子標籤的attribute其實和Maven2的pom.xml內容意義相同。而artifact:dependencies標籤的pathId屬性是給path標籤reference,而path才匯整artifact:dependencies底下所引入的jar檔路徑,作為classpath的設定。

  比較好玩的是:

<dependency groupId="org.hibernate" artifactId="hibernate" version="3.2.7.ga">
    <exclusion groupId="javax.transaction" artifactId="jta"/>
</dependency>
<dependency groupId="org.apache.geronimo.specs" artifactId="geronimo-jta_1.1_spec" version="1.1.1"/>

  使用exclusion標籤是指排除之意,因Hibernate的JTA功能屬商用功能,是故予以排除,而改使用Apache Geronimo出品的JTA產品,是故才有上述的設定。
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 Jemmy 的頭像
    Jemmy

    Jemmy Walker

    Jemmy 發表在 痞客邦 留言(0) 人氣()