设置一个第三方JAR的类路径以包含另一个与Ant的类路径

时间:2012-08-08 18:52:34

标签: java ant classpath

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

我需要这个来运行来自this site的vanilla 使用Schematron和ANT 示例。 (我99%肯定你不需要知道什么是Schematron来回答这个问题。)示例的说明是在页面顶部附近链接的简短PDF。我将所有文件的内容直接从PDF复制粘贴到Eclipse中。

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

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的类路径中列出,则会发生类似的错误。我已经确认SAXON JAR中存在TransformerFactoryImpl,但我无法弄清楚如何让Schematron代码识别它。我该如何设置类路径? (或者,如果我错了,这不是类路径问题,我如何让构建成功?)

2 个答案:

答案 0 :(得分: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.jar放在Ant库文件夹中使net.sf.saxon.TransformerFactoryImpl可用并解决错误(在使用Ant 1.8.2的Ubuntu Linux上测试)。

答案 1 :(得分:1)

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