如何使用最新的 JVM 构建 xerces-j 2.11?
How to build xerces-j 2.11 with an up-to-date JVM?
我已经从 https://svn.apache.org/repos/asf/xerces/java/tags/Xerces-J_2_11_0 检查了 xerces-j 2.11。现在我想构建它,但在编译过程中出现以下错误:
compile:
[xjavac] Compiling 596 source files to C:\Users\abrieg\workingcopy\xerces-trunk\build\classes
[xjavac] C:\Users\abrieg\workingcopy\xerces-trunk\build\src\org\apache\html\dom\HTMLFrameElementImpl.java:28: error: HTMLFrameElementImpl is not abstract and does not override abstract method getContentDocument() in HTMLFrameElement
[xjavac] public class HTMLFrameElementImpl
[xjavac] ^
[xjavac] C:\Users\abrieg\workingcopy\xerces-trunk\build\src\org\apache\html\dom\HTMLIFrameElementImpl.java:28: error: HTMLIFrameElementImpl is not abstract and does not override abstract method getContentDocument() in HTMLIFrameElement
[xjavac] public class HTMLIFrameElementImpl
[xjavac] ^
[xjavac] C:\Users\abrieg\workingcopy\xerces-trunk\build\src\org\apache\html\dom\HTMLObjectElementImpl.java:28: error: HTMLObjectElementImpl is not abstract and does not override abstract method getContentDocument() in HTMLObjectElement
[xjavac] public class HTMLObjectElementImpl
[xjavac] ^
[xjavac] Note: Some input files use or override a deprecated API.
[xjavac] Note: Recompile with -Xlint:deprecation for details.
[xjavac] Note: Some input files use unchecked or unsafe operations.
[xjavac] Note: Recompile with -Xlint:unchecked for details.
[xjavac] 3 errors
问题是 xjavac 任务不使用 /tools/xml-apis.jar
中的 类,而是使用 jdk 中的 rt.jar
。
在以下VM中编译为运行:
java version "1.8.0_31"
Java(TM) SE Runtime Environment (build 1.8.0_31-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.31-b07, mixed mode)
我已经使用认可的库覆盖机制将 xerces-j 2.11 的 xml-apis.jar
放入 VM 中,但这没有用。
xjavac
调用定义为
<xjavac srcdir="${build.src}"
destdir="${build.dest}"
source="${javac.source}"
target="${javac.target}"
classpath="${build.dir}/classes:${tools.dir}/${jar.apis}:${tools.dir}/${jar.resolver}:${tools.dir}/${jar.serializer}"
debug="${debug}"
debuglevel="${debuglevel}"
deprecation="${deprecation}"
optimize="${optimize}"
includeAntRuntime="false"
includeJavaRuntime="false"
excludes="org/xml/sax/**
javax/xml/**
org/w3c/dom/*
org/w3c/dom/bootstrap/**
org/w3c/dom/events/**
org/w3c/dom/ls/**
org/w3c/dom/html/**
org/w3c/dom/ranges/**
org/w3c/dom/traversal/**
org/w3c/dom/views/**
org/w3c/dom/xpath/**"
/>
如何确保 xml-apis.jar
用于编译而不是 JVM 中的 类?
您需要将 xml-apis.jar
添加到 Javac 的 bootstrap classes 之前。
<xjavac srcdir="${build.src}"
destdir="${build.dest}"
source="${javac.source}"
target="${javac.target}"
classpath="${build.dir}/classes:${tools.dir}/${jar.apis}:${tools.dir}/${jar.resolver}:${tools.dir}/${jar.serializer}"
debug="${debug}"
debuglevel="${debuglevel}"
deprecation="${deprecation}"
optimize="${optimize}"
includeAntRuntime="false"
includeJavaRuntime="false"
excludes="org/xml/sax/**
javax/xml/**
org/w3c/dom/*
org/w3c/dom/bootstrap/**
org/w3c/dom/events/**
org/w3c/dom/ls/**
org/w3c/dom/html/**
org/w3c/dom/ranges/**
org/w3c/dom/traversal/**
org/w3c/dom/views/**
org/w3c/dom/xpath/**"
>
<compilerarg line="-Xbootclasspath/p:${tools.dir}/${jar.apis}"/>
</xjavac>
我已经从 https://svn.apache.org/repos/asf/xerces/java/tags/Xerces-J_2_11_0 检查了 xerces-j 2.11。现在我想构建它,但在编译过程中出现以下错误:
compile:
[xjavac] Compiling 596 source files to C:\Users\abrieg\workingcopy\xerces-trunk\build\classes
[xjavac] C:\Users\abrieg\workingcopy\xerces-trunk\build\src\org\apache\html\dom\HTMLFrameElementImpl.java:28: error: HTMLFrameElementImpl is not abstract and does not override abstract method getContentDocument() in HTMLFrameElement
[xjavac] public class HTMLFrameElementImpl
[xjavac] ^
[xjavac] C:\Users\abrieg\workingcopy\xerces-trunk\build\src\org\apache\html\dom\HTMLIFrameElementImpl.java:28: error: HTMLIFrameElementImpl is not abstract and does not override abstract method getContentDocument() in HTMLIFrameElement
[xjavac] public class HTMLIFrameElementImpl
[xjavac] ^
[xjavac] C:\Users\abrieg\workingcopy\xerces-trunk\build\src\org\apache\html\dom\HTMLObjectElementImpl.java:28: error: HTMLObjectElementImpl is not abstract and does not override abstract method getContentDocument() in HTMLObjectElement
[xjavac] public class HTMLObjectElementImpl
[xjavac] ^
[xjavac] Note: Some input files use or override a deprecated API.
[xjavac] Note: Recompile with -Xlint:deprecation for details.
[xjavac] Note: Some input files use unchecked or unsafe operations.
[xjavac] Note: Recompile with -Xlint:unchecked for details.
[xjavac] 3 errors
问题是 xjavac 任务不使用 /tools/xml-apis.jar
中的 类,而是使用 jdk 中的 rt.jar
。
在以下VM中编译为运行:
java version "1.8.0_31"
Java(TM) SE Runtime Environment (build 1.8.0_31-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.31-b07, mixed mode)
我已经使用认可的库覆盖机制将 xerces-j 2.11 的 xml-apis.jar
放入 VM 中,但这没有用。
xjavac
调用定义为
<xjavac srcdir="${build.src}"
destdir="${build.dest}"
source="${javac.source}"
target="${javac.target}"
classpath="${build.dir}/classes:${tools.dir}/${jar.apis}:${tools.dir}/${jar.resolver}:${tools.dir}/${jar.serializer}"
debug="${debug}"
debuglevel="${debuglevel}"
deprecation="${deprecation}"
optimize="${optimize}"
includeAntRuntime="false"
includeJavaRuntime="false"
excludes="org/xml/sax/**
javax/xml/**
org/w3c/dom/*
org/w3c/dom/bootstrap/**
org/w3c/dom/events/**
org/w3c/dom/ls/**
org/w3c/dom/html/**
org/w3c/dom/ranges/**
org/w3c/dom/traversal/**
org/w3c/dom/views/**
org/w3c/dom/xpath/**"
/>
如何确保 xml-apis.jar
用于编译而不是 JVM 中的 类?
您需要将 xml-apis.jar
添加到 Javac 的 bootstrap classes 之前。
<xjavac srcdir="${build.src}"
destdir="${build.dest}"
source="${javac.source}"
target="${javac.target}"
classpath="${build.dir}/classes:${tools.dir}/${jar.apis}:${tools.dir}/${jar.resolver}:${tools.dir}/${jar.serializer}"
debug="${debug}"
debuglevel="${debuglevel}"
deprecation="${deprecation}"
optimize="${optimize}"
includeAntRuntime="false"
includeJavaRuntime="false"
excludes="org/xml/sax/**
javax/xml/**
org/w3c/dom/*
org/w3c/dom/bootstrap/**
org/w3c/dom/events/**
org/w3c/dom/ls/**
org/w3c/dom/html/**
org/w3c/dom/ranges/**
org/w3c/dom/traversal/**
org/w3c/dom/views/**
org/w3c/dom/xpath/**"
>
<compilerarg line="-Xbootclasspath/p:${tools.dir}/${jar.apis}"/>
</xjavac>