在使用ant build.xml进行编译时,如何使用没有JDK库的外部库

时间:2013-09-11 07:59:21

标签: java xml ant build jaxb

我的程序之前使用的是JDK 1.4。现在我想使用1.6来编译它。它成功地针对1.4进行了编译,但是当我将JDK更改为1.6时,它会产生以下编译错误。

    [javac] symbol  : constructor StartTagInfo(java.lang.String,java.lang.String,java.lang.String,org.xml.sax.helpers.At
tributesImpl,com.abc.jaxb.ssdclm.impl.runtime.MSVValidator)
    [javac] location: class com.sun.msv.util.StartTagInfo
    [javac]             StartTagInfo sti = new StartTagInfo( 

但是我的类路径中有jaxb-libs-jwsdp-1.6 jar,其中包含带有上述构造函数的StartTagInfo类。 如果有人知道这个问题,请告诉我。感谢。

1 个答案:

答案 0 :(得分:1)

我怀疑由于JDK版本的变化,会有一个支持lib jar的版本变得无可比拟。最糟糕的可能是它可能是一个本地的jar jar。

我没有提供当前问题的解决方案。但提供另一种方法。如果你不能用这种方法改变你的代码,请告诉我;我们将尝试找到现有java升级的问题。

使用Java 1.6,不再需要JWSDP包。 Java 1.6版本附带内置的JAXB版本,因此可以直接使用它。

Java 1.6版本附带“xjc”编译器,用于从xml生成java对象。

Usage: xjc [-options ...]

下面的代码片段展示了如何在ant脚本中使用1.6的xjc编译器来生成java文件的XML文件。

下面的ant目标将编译xsd文件test1.xsd和test2.xsd,并将从xsd创建java对象到文件夹输出/ java

<target name=”xsd2java” description=”Generate java model from XSD xml schema using XJC compiler.”>
<echo message=”Generating java files from XSD using XJC compiler…” />
<mkdir dir=”output/java”/>
<exec executable=”xjc”>
<arg value=”-d”/>
<arg value=”output/java”/>
<arg value=”test1.xsd”/>
<arg value=”test2.xsd”/>
</exec>
</target>

以下代码片段显示了如何从dtd文件编译Java对象。

<div><macrodef name=”dtd2java”>
<attribute name=”dtdDir”/>
<attribute name=”dtdFile”/>
<attribute name=”javaPackage”/>
<attribute name=”javaDir”/>
<sequential>
<mkdir dir=”output/java/@{javaDir}”/>
<exec executable=”xjc”>
<arg value=”-d”/>
<arg value=”${output.dir}/java”/>
<arg value=”-p”/>
<arg value=”@{javaPackage}”/>
<arg value=”${output.dir}/java/@{javaDir}”/>
<arg value=”-extension”/><arg value=”-dtd”/>
<arg value=”@{dtdDir}/@{dtdFile}”/>
</exec>
</sequential>
</macrodef>
<target name=”dtd2java” description=”Generate java model from DTD using XJC2 compiler.” >
<echo message=”Generating java files from DTD using XJC2 compiler…”/>
<dtd2java dtdDir=”test/dtd” dtdFile=”test1.dtd” javaPackage=”com.test1.dtd” javaDir=”com/test1/dtd”/>
<dtd2java dtdDir=”test/dtd” dtdFile=”test2.dtd” javaPackage=”com.test2.dtd” javaDir=”com/test2/dtd”/>
</target>
</div>