Maven可以包含Ant Script,反過來說,Ant可否使用Maven的dependency repostories呢?It's right。使用Maven Ant Task。
- 先自官方網站http://maven.apache.org/ant-tasks/下載最新的maven-ant-tasks-x.y.z.jar檔,x.y.z目前版本是2.1.0。
- 將這個Jar檔放進Ant Home目錄下的lib目錄。
- 可以在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產品,是故才有上述的設定。