3

如何设置一个第三方 JAR 的类路径以在 Ant 中包含第二个第三方 JAR?

我需要这个来运行 vanilla Using Schematron with ANT example from this site(我 99% 确定您不需要知道 Schematron 是什么来回答这个问题。)该示例的说明位于页面顶部附近链接的简短 PDF 中。我将所有文件的内容直接从 PDF 复制粘贴到 Eclipse 中。

然后我ant-schematron-2010-04-14.jar从上面的站点下载,并saxon9he.jar从 SAXON SourceForge 页面获取。我还更改了构建文件以匹配。带有行号且不带注释,它看起来像这样:

09 <project name="schematron-ant-sample" default="validate">
14     <taskdef name="schematron"
15              classname="com.schematron.ant.SchematronTask"
16              classpath="lib/ant-schematron-2010-04-14.jar; lib/saxon9he.jar" />
22     <target name="validate" description="Test with a Fileset">
23         <schematron schema="sch/sample.sch" failonerror="false">
24             <fileset dir="xml" includes="*.xml" />
25         </schematron>
26     </target>
27 </project>

当我运行构建文件时,出现以下错误:

validate:

BUILD FAILED
C:\Users\gdawes\Documents\workspace\SchematronAntExample\build.xml:23: /
javax.xml.transform.TransformerFactoryConfigurationError: Provider /
net.sf.saxon.TransformerFactoryImpl not found

Total time: 265 milliseconds

如果 SAXON JAR 未列在schematron的类路径中,则会发生类似的错误。我已经确认它TransformerFactoryImpl存在于 SAXON JAR 中,但我不知道如何让 Schematron 代码识别它。我应该如何设置类路径?(或者,如果我错了并且这不是类路径问题,我该如何让构建成功?)

4

2 回答 2

2

classpath中的应该<taskdef>只包含:lib/ant-schematron-2010-04-14.jar,类似于Using Schematron for Ant by example中提供的示例。

<?xml version="1.0" encoding="UTF-8"?>
<project name="schematron-ant-sample" default="validate">
  <taskdef name="schematron"
      classname="com.schematron.ant.SchematronTask"
      classpath="lib/ant-schematron-2010-04-14.jar" />
  <target name="validate" description="Test with a Fileset">
    <schematron schema="sch/sample.sch" failonerror="false">
      <fileset dir="xml" includes="*.xml" />
    </schematron>
  </target>
</project>

除了更正 之外<taskdef>,将 放在saxon9he.jarAnt 库文件夹中也net.sf.saxon.TransformerFactoryImpl可以使用并解决错误(在 Ubuntu Linux 上使用 Ant 1.8.2 测试)。

于 2012-08-08T19:13:49.700 回答
1

如果我没记错的话,taskdef 上的类路径只是用于查找您要加载的类的类路径,它不是任务实际运行的类路径。尝试将所需的 jars 添加到Eclipse 中 Ant 构建配置User Entries的选项卡部分。Classpath

于 2012-08-08T19:44:37.367 回答