【发布时间】:2014-04-30 09:39:54
【问题描述】:
在我的 Ant 构建脚本中,我使用以下几行设置我的 xslt 处理器:
<xslt>
<factory>
<attribute name="http://saxon.sf.net/feature/xinclude-aware" value="true" />
<attribute name="http://saxon.sf.net/feature/version-warning" value="false" />
</factory>
<classpath>
<fileset dir="${param}/lib">
<include name="saxon9.jar" />
</fileset>
</classpath>
</xslt>
当ANT从命令行运行时,像这样
"C:\Programs\jre\bin\java.exe" -classpath "C:\ant\lib\ant-launcher.jar" "-Dant.home=C:\ant" org.apache.tools。 ant.launch.Launcher 安装 -Dparam "C:\dir" basedir "C:\dir2\bin" -emacs -f "C:\dir2\build.xml"
构建成功完成。但是,当我从这样的 java 程序中调用脚本时:
File buildFile = new File(dir2 + "/build.xml");
Project p = new Project();
p.setUserProperty("ant.file", buildFile.getAbsolutePath());
p.setUserProperty("ant.library.dir", "C:/dir2/lib");
p.setUserProperty("param", "C:/dir");
p.setBasedir("C:/dir2/bin");
DefaultLogger consoleLogger = new DefaultLogger();
consoleLogger.setEmacsMode(true);
consoleLogger.setErrorPrintStream(System.err);
consoleLogger.setOutputPrintStream(System.out);
consoleLogger.setMessageOutputLevel(Project.MSG_INFO);
p.addBuildListener(consoleLogger);
try {
p.fireBuildStarted();
p.initProperties();
p.init();
ProjectHelper helper = ProjectHelper.getProjectHelper();
p.addReference("ant.projectHelper", helper);
helper.parse(p, buildFile);
p.executeTarget("Install");
p.fireBuildFinished(null);
} catch (BuildException e) {
p.fireBuildFinished(e);
}
程序返回以下 xslt 错误:TransformerFactory 无法识别属性“http://saxon.sf.net/feature/xinclude-aware”。在 com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl.setAttribute(未知来源)。此错误与How to execute XSLT 2.0 with ant? 中的类似。
我尝试了几个选项来设置包含 saxon 的 lib 目录(如 ant.lib.directory),但这没有任何效果。从java(或强制noclasspath)设置lib目录的正确方法是什么?
【问题讨论】: