如何设置从Java运行ant脚本的lib目录?

时间:2014-03-23 00:36:13

标签: java ant saxon

在我的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”。 at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl.setAttribute(Unknown Source)。此错误与How to execute XSLT 2.0 with ant?中的错误类似。

我尝试了几个选项来设置包含saxon的lib目录(比如使用ant.lib.directory),但这没有任何效果。从java(或强制noclasspath)设置lib目录的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

您是否尝试过设置&#34;名称&#34; &#34;工厂的属性&#34;元素到&#34; net.sf.saxon.TransformerFactoryImpl&#34;?