我正在尝试构建dom4j JAR,其中包含一个xml-apis JAR,其中包含的DOM API比最近的JDK附带的更早。
但是,即使在构建文件中源和目标编译器属性设置为1.3,即使构建路径中包含xml-apis JAR,Ant仍会尝试将dom4j编译为另一个更新的w3c API (我猜一个来自JDK安装)。
以下是相关的Ant代码:
<path id="compile.classpath">
<fileset dir="./lib/endorsed">
<include name="*.jar" />
</fileset>
<fileset dir="./lib">
<include name="*.jar" />
</fileset>
</path>
<target name="compile" depends="prepare-src">
<javac srcdir="${build.src}"
destdir="${build.dest}"
debug="${debug}"
optimize="${optimize}"
target="1.3"
source="1.3"
deprecation="${deprecation}"
classpathref="compile.classpath">
</javac>
</target>
应该使用的JAR是在lib / endorsed中,但在编译期间不使用它。
怎么回事?
答案 0 :(得分:7)
您可以修改引导类路径,并且在ANT中支持具有特定属性的引导类路径,但我认为它应该是java.endorsed.dirs
属性(在原始javac中):
javac -Djava.endorsed.dirs=/some/path/lib/endorsed ...
或使用compilerarg
ANT子元素:
<target name="compile" depends="prepare-src">
<javac srcdir="${build.src}"
destdir="${build.dest}"
debug="${debug}"
optimize="${optimize}"
target="1.3"
source="1.3"
deprecation="${deprecation}"
classpathref="compile.classpath">
<compilerarg value="-Djava.endorsed.dirs=/some/path/lib/endorsed"/>
</javac>
您不应将endorsed
目录添加到类路径中作为引导类路径,并且在类路径之前检查任何已签名的目录以解析所需类型。这意味着将首先找到JDK的新DOM实现。
答案 1 :(得分:0)
您可以尝试排除旧的lib。
<path id="compile.classpath">
<fileset dir="./lib">
<include name="*.jar" />
<exclude name="dom4j.jar" />
</fileset>
<fileset dir="./lib/endorsed">
<include name="*.jar" />
</fileset>
</path>
<target name="compile" depends="prepare-src">
<javac srcdir="${build.src}"
destdir="${build.dest}"
debug="${debug}"
optimize="${optimize}"
target="1.3"
source="1.3"
deprecation="${deprecation}"
classpathref="compile.classpath">
</javac>
</target>
答案 2 :(得分:0)
使用bootclasspath
/ bootclasspathref
属性。
答案 3 :(得分:0)
仅供参考,这可以使用像这样的maven来实现,
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
<compilerArguments>
<endorseddirs>${endorsed.dir}</endorseddirs>
</compilerArguments>
</configuration>
</plugin>
</plugins>