我目前有一个项目,其中有一个build.xml。在这个构建中,有一个命令CreateDB,它调用something.jar。这个jar运行一些sql脚本(mysql-db)。所以,现在,我可以通过执行来运行该命令
ant CreateDB
从命令行。但现在,我需要做更多的事情。当我构建应用程序(使用Maven)时,我想运行ant命令。所以,我创建了这个pom.xml(见下文),但它不起作用,我得到了这个错误:
org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class 'org.gjt.mm.mysql.Driver'
根据这条消息,我似乎没有mySql的连接器,但我在依赖项中指定了它。那么,我做错了什么?
Pom.xml:
<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>com.dl.test</groupId>
<artifactId>toto</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>toto</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.23</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.6</version>
<executions>
<execution>
<id>mysql</id>
<phase>integration-test</phase>
<configuration>
<tasks>
<!-- For MySql -->
<ant antfile="pathbuild.xml" target="createDB" />
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
maven-antrun插件启动的ant任务不会自动继承maven依赖项。
您必须在build.xml代码中显式引用maven测试类路径,该类路径可通过maven.test.classpath
属性获得。
因此,您的执行可能类似于以下内容(test.classpath也需要在您的build.xml中引用):
<execution>
<id>mysql</id>
<phase>integration-test</phase>
<configuration>
<tasks>
<!-- For MySql -->
<property name="test_classpath" refid="maven.test.classpath"/>
<ant antfile="pathbuild.xml" target="createDB" />
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
另请参阅:Maven AntRun插件-引用Maven Classpath