sql2java是通过ant脚本组织项目来实现java代码生成的,所以要使用sql2java就必须使用ant来执行build.xml脚本。如果自己项目是用maven来组织管理的,那么要使用sql2java来生成代码就涉及到maven执行ant脚本的问题。 maven提供了执行ant脚本的功能,这里就用到了maven插件maven-antrun-plugin。
sql2java/pom.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>sql2java</groupId>
<artifactId>sql2java-generator</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<name>sql2java-generator</name>
<!-- 调用 ant 执行 build.xml 完成jav代码生成 -->
<properties>
<!--
sql2java参数定义,参见build.xml
调用方式
mvn generate-sources \
-Dsql2java-config=../sql2java.properties \
-Dgenerated-src=../src/main/java \
-Ddriver-jar=../lib/mysql-connector-java-5.1.43-bin.jar
-->
<sql2java-config>../sql2java.properties</sql2java-config>
<generated-src>../src/main/java</generated-src>
<!--<driver-jar>../lib/mysql-connector-java-5.1.43-bin.jar</driver-jar>-->
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
<id>ant-build</id>
<!--绑定插件到代码生成阶段执行-->
<phase>generate-sources</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<!--
执行builx.xml脚本,
并向build.xml传递三个参数 sql2java-config,generated-src,driver-jar
-->
<ant antfile="build.xml" target="rebuild" inheritAll="false">
<property name="sql2java-config" value="${sql2java-config}"/>
<property name="generated-src" value="${generated-src}"/>
<property name="driver-jar" value="${driver-jar}"/>
</ant>
</target>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
上面的脚本中将antrun插件绑定在generate-sources 生命周期(phase),并给antrun指定了要执行的具体任务(<target></target>
定义),那么maven执行时,只要指定生命周期(phase)为generate-sources,就可以执行buid.xml脚本了,如下:
mvn generate-sources \
-Dsql2java-config=../sql2java.properties \
-Dgenerated-src=../src/main/java \
-Ddriver-jar=../lib/mysql-connector-java-5.1.43-bin.jar
sql2java/pom.xml中antrun插件也可以如下定义,即不将它绑定到任何生命周期(phase),而是通过在命令行指定执行插件目标(goal)的方式来执行build.xml脚本:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
<configuration>
<target>
<!--
执行builx.xml脚本,
并向build.xml传递三个参数 sql2java-config,generated-src,driver-jar
-->
<ant antfile="build.xml" target="rebuild" inheritAll="false">
<property name="sql2java-config" value="${sql2java-config}"/>
<property name="generated-src" value="${generated-src}"/>
<property name="driver-jar" value="${driver-jar}"/>
</ant>
</target>
</configuration>
</plugin>
上面的代码与本文最开始的sql2java/pom.xml
中<plugin></plugin>
定义相比,就是少了<execution><executions></execution></executions>
两层,只将configuration
元素提到最上层。
这样以来,意思就变了,maven调用的方式也要做相应的修改,就要在命令行指定插件目标(goal),而不是生命周期阶段(phase)
mvn antrun:run \
-Dsql2java-config=../sql2java.properties \
-Dgenerated-src=../src/main/java \
-Ddriver-jar=../lib/mysql-connector-java-5.1.43-bin.jar
build.xml完整代码参见:https://github.com/10km/sql2java-2-6-7/blob/custom/build.xml pom.xml完整代码参见 :https://github.com/10km/sql2java-2-6-7/blob/custom/pom.xml 《maven-antrun-plugin》