提交 d6712d59 编写于 作者: C Chris Beams

Generate spring-oxm test classes and bindings

 - Generate castor test classes with genCastor task
 - Generate xmlbeans test classes with genXmlbeans task
 - Generate JAXB2 test classes with genJaxb task
 - Generate JiBX bindings by extending existing compileTestJava task

Test classes are written into their own dedicated output folders and
tied into the spring-oxm classpath using the files(...).builtBy(...)
directive.

Incremental build works as expected across all of these customizations.

`gradle eclipse` and `gradle idea` generate correct .project / .iml
metadata respectively, i.e., these special cases do not cause a problem
in the IDE (as they used to prior to the move to Gradle).
上级 366f0d78
......@@ -227,6 +227,7 @@ project('spring-tx') {
project('spring-oxm') {
description = 'Spring Object/XML Marshalling'
apply from: 'oxm.gradle'
dependencies {
compile project(":spring-context")
compile "commons-lang:commons-lang:2.5"
......@@ -238,10 +239,9 @@ project('spring-oxm') {
testCompile "org.codehaus.jettison:jettison:1.0.1"
testCompile "xmlunit:xmlunit:1.2"
testCompile "xmlpull:xmlpull:1.1.3.4a"
// this is a workaround until we have xjc/etc generation plugged in
// in order for this to work, you must FIRST run `ant test` within the
// .oxm module. that will create/populate the target/test-classes dir
testCompile(files("target/test-classes"))
testCompile(files(genCastor.classesDir).builtBy(genCastor))
testCompile(files(genJaxb.classesDir).builtBy(genJaxb))
testCompile(files(genXmlbeans.classesDir).builtBy(genXmlbeans))
}
}
......
<?xml version="1.0" encoding="UTF-8"?>
<project name="org.springframework.oxm" xmlns:ivy="antlib:org.apache.ivy.ant">
<property file="${basedir}/../build.properties"/>
<property file="${basedir}/../build.versions"/>
<import file="${basedir}/../build-spring-framework/package-bundle.xml"/>
<import file="${basedir}/../spring-build/standard/default.xml"/>
<property name="flightSchema" value="${basedir}/src/test/resources/org/springframework/oxm/flight.xsd"/>
<property name="orderSchema" value="${basedir}/src/test/resources/org/springframework/oxm/order.xsd"/>
<property name="castorBuilderProperties" value="${basedir}/src/test/castor/castorbuilder.properties"/>
<property name="test.castor.dir" value="${target.dir}/castor/test"/>
<property name="test.jaxb.dir" value="${target.dir}/jaxb/test"/>
<macrodef name="test-compile">
<attribute name="classpath.id"/>
<attribute name="input.dir"/>
<attribute name="output.dir"/>
<attribute name="resources.dir"/>
<sequential>
<delete quiet="true" dir="@{output.dir}"/>
<mkdir dir="@{output.dir}"/>
<!-- Castor -->
<ivy:cachepath resolveId="castor.classpath" pathid="castor.classpath" organisation="org.codehaus.castor"
module="com.springsource.org.castor.anttask" revision="1.2.0" conf="runtime" type="jar"
inline="true" log="download-only"/>
<taskdef name="castor" classname="org.castor.anttask.CastorCodeGenTask" classpathref="castor.classpath"/>
<delete quiet="true" dir="${test.castor.dir}" />
<mkdir dir="${test.castor.dir}" />
<castor types="j2" warnings="false" file="${flightSchema}" todir="${test.castor.dir}"
package="org.springframework.oxm.castor" properties="${castorBuilderProperties}"/>
<castor types="j2" warnings="false" file="${orderSchema}" todir="${test.castor.dir}"
package="org.springframework.oxm.castor" properties="${castorBuilderProperties}"/>
<do-compile classpath.id="@{classpath.id}" input.dir="${test.castor.dir}" output.dir="@{output.dir}"
resources.dir="${test.castor.dir}"/>
<copy todir="@{output.dir}">
<fileset dir="${test.castor.dir}">
<exclude name="**/*.java"/>
</fileset>
</copy>
<!-- JAXB2 -->
<ivy:cachepath resolveId="jaxb.classpath" pathid="jaxb.classpath" organisation="com.sun.xml"
module="com.springsource.com.sun.tools.xjc" revision="2.1.7" conf="runtime" type="jar" inline="true"
log="download-only"/>
<taskdef name="xjc" classname="com.sun.tools.xjc.XJCTask" classpathref="jaxb.classpath"/>
<delete quiet="true" dir="${test.jaxb.dir}" />
<mkdir dir="${test.jaxb.dir}" />
<xjc destdir="${test.jaxb.dir}" package="org.springframework.oxm.jaxb.test" schema="${flightSchema}">
<produces dir="${test.jaxb.dir}" includes="**/*.java"/>
</xjc>
<do-compile classpath.id="@{classpath.id}" input.dir="${test.jaxb.dir}" output.dir="@{output.dir}"
resources.dir="${test.jaxb.dir}"/>
<!-- Standard Compile -->
<test-pre-compile classpath.id="@{classpath.id}" input.dir="@{input.dir}" output.dir="@{output.dir}"
resources.dir="@{resources.dir}"/>
<do-compile classpath.id="@{classpath.id}" input.dir="@{input.dir}" output.dir="@{output.dir}"
resources.dir="@{resources.dir}"/>
<test-post-compile classpath.id="@{classpath.id}" input.dir="@{input.dir}" output.dir="@{output.dir}"
resources.dir="@{resources.dir}"/>
</sequential>
</macrodef>
<macrodef name="test-pre-compile">
<attribute name="classpath.id"/>
<attribute name="input.dir"/>
<attribute name="output.dir"/>
<attribute name="resources.dir"/>
<sequential>
<!-- XMLBeans -->
<ivy:cachepath resolveId="xmlbeans.classpath" pathid="xmlbeans.classpath" organisation="org.apache.xmlbeans"
module="com.springsource.org.apache.xmlbeans" revision="2.4.0"
conf="runtime" type="jar" inline="true" log="download-only"/>
<taskdef name="xmlbeans" classname="org.apache.xmlbeans.impl.tool.XMLBean" classpathref="xmlbeans.classpath"/>
<xmlbeans schema="${flightSchema}" classgendir="@{output.dir}" classpathref="xmlbeans.classpath" compiler="modern"
verbose="false"/>
</sequential>
</macrodef>
<macrodef name="test-post-compile">
<attribute name="classpath.id"/>
<attribute name="input.dir"/>
<attribute name="output.dir"/>
<attribute name="resources.dir"/>
<sequential>
<!-- JiBX -->
<ivy:cachepath resolveId="jibx.classpath" pathid="jibx.classpath" organisation="net.sourceforge.jibx"
module="com.springsource.org.jibx.binding" revision="1.1.5"
conf="runtime" type="jar" inline="true" log="download-only"/>
<taskdef name="jibx-bind" classname="org.jibx.binding.ant.CompileTask" classpathref="jibx.classpath"/>
<jibx-bind load="true" binding="${basedir}/src/test/resources/org/springframework/oxm/jibx/binding.xml">
<classpathset dir="@{output.dir}">
<include name="**/jibx/**/*"/>
</classpathset>
</jibx-bind>
</sequential>
</macrodef>
</project>
configurations {
castor
xjc
xmlbeans
jibx
}
dependencies {
castor "org.codehaus.castor:castor-anttasks:1.2"
castor "velocity:velocity:1.5"
xjc "com.sun.xml:com.springsource.com.sun.tools.xjc:2.1.7"
xmlbeans "org.apache.xmlbeans:com.springsource.org.apache.xmlbeans:2.4.0"
jibx "org.jibx:jibx-bind:1.1.5"
jibx "bcel:bcel:5.1"
}
genSourcesDir = "${buildDir}/generated-sources"
flightSchema = "${projectDir}/src/test/resources/org/springframework/oxm/flight.xsd"
task genCastor {
orderSchema = "${projectDir}/src/test/resources/org/springframework/oxm/order.xsd"
castorBuilderProperties = "${projectDir}/src/test/castor/castorbuilder.properties"
sourcesDir = "${genSourcesDir}/castor"
classesDir = "${buildDir}/classes/castor"
inputs.files flightSchema, orderSchema, castorBuilderProperties
outputs.dir classesDir
doLast() {
project.ant {
taskdef name: "castor", classname: "org.castor.anttask.CastorCodeGenTask",
classpath: configurations.castor.asPath
mkdir(dir: sourcesDir)
mkdir(dir: classesDir)
castor(types: "j2", warnings: false, file: flightSchema, todir: sourcesDir,
package: "org.springframework.oxm.castor", properties: castorBuilderProperties)
castor(types: "j2", warnings: false, file: orderSchema, todir: sourcesDir,
package: "org.springframework.oxm.castor", properties: castorBuilderProperties)
javac(destdir: classesDir, source: 1.5, target: 1.5, debug: true,
debugLevel: "lines,vars,source", classpath: configurations.castor.asPath) {
src(path: sourcesDir)
include(name: "**/*.java")
include(name: "*.java")
}
copy(todir: classesDir) {
fileset(dir: sourcesDir, erroronmissingdir: false) {
exclude(name: "**/*.java")
}
}
}
}
}
task genJaxb {
sourcesDir = "${genSourcesDir}/jaxb"
classesDir = "${buildDir}/classes/jaxb"
inputs.files flightSchema
outputs.dir classesDir
doLast() {
project.ant {
taskdef name: "xjc", classname: "com.sun.tools.xjc.XJCTask",
classpath: configurations.xjc.asPath
mkdir(dir: sourcesDir)
mkdir(dir: classesDir)
xjc(destdir: sourcesDir, schema: flightSchema,
package: "org.springframework.oxm.jaxb.test") {
produces(dir: sourcesDir, includes: "**/*.java")
}
javac(destdir: classesDir, source: 1.5, target: 1.5, debug: true,
debugLevel: "lines,vars,source",
classpath: configurations.castor.asPath) {
src(path: sourcesDir)
include(name: "**/*.java")
include(name: "*.java")
}
copy(todir: classesDir) {
fileset(dir: sourcesDir, erroronmissingdir: false) {
exclude(name: "**/*.java")
}
}
}
}
}
task genXmlbeans {
classesDir = "${buildDir}/classes/xmlbeans"
inputs.files flightSchema
outputs.dir classesDir
doLast() {
project.ant {
taskdef name: "xmlbeans",
classname: "org.apache.xmlbeans.impl.tool.XMLBean",
classpath: configurations.xmlbeans.asPath
xmlbeans(classgendir: classesDir, schema: flightSchema,
compiler: "modern", verbose: "false",
classpath: configurations.xmlbeans.asPath)
}
}
}
// add jibx binding to the normal test compilation process
compileTestJava {
bindingXml = "${projectDir}/src/test/resources/org/springframework/oxm/jibx/binding.xml"
doLast() {
project.ant {
taskdef(name: "jibx",
classname: "org.jibx.binding.ant.CompileTask",
classpath: configurations.jibx.asPath)
jibx(verbose: true, load: true, binding: bindingXml) {
classpathset(dir: sourceSets.test.output.classesDir) {
include(name: "**/jibx/**/*")
}
}
}
}
}
......@@ -29,7 +29,12 @@ import static org.custommonkey.xmlunit.XMLAssert.*;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
@org.junit.Ignore // TODO fix this issue https://gist.github.com/1174579
/**
* @author Arjen Poutsma
*
* NOTE: These tests fail under Eclipse/IDEA because JiBX binding does
* not occur by default. The Gradle build should succeed, however.
*/
public class JibxMarshallerTests extends AbstractMarshallerTests {
@Override
......
......@@ -25,8 +25,10 @@ import org.springframework.oxm.Unmarshaller;
/**
* @author Arjen Poutsma
*
* NOTE: These tests fail under Eclipse/IDEA because JiBX binding does
* not occur by default. The Gradle build should succeed, however.
*/
@org.junit.Ignore // TODO fix this issue https://gist.github.com/1174575
public class JibxUnmarshallerTests extends AbstractUnmarshallerTests {
@Override
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册