我正在使用@Grab 注释来获取我可以提供给 XMLSlurper 的 Html 解析器的定义(我认为它是 tagoup 解析器),当我从 cmd 行运行我的脚本时一切都很好。如果我从 Ant 调用相同的脚本,我会收到 Ivy NoClassDefFound 错误。我认为这可能与在 Antlib 中拥有 Ivy 有关。是否有另一种方法来解析 Html 而无需通过@Grab 自定义 slurper?
这个:
@Grab(group='org.ccil.cowan.tagsoup', module='tagsoup', version='1.2' )
doc = new XmlSlurper(new org.ccil.cowan.tagsoup.Parser()).parse(confluenceWebPageInputStream)
从命令行工作得很好,但是当我从 Ant 构建目标运行它时:
<target name="update-wiki-chart">
<echo message="Will update chart for version ${version}"/>
<java dir="${basedir}" classname="groovy.lang.GroovyShell">
<arg value="ParseWikiPage.groovy"/>
<classpath refid="groovylib"/>
</java>
</target>
其中 groovyLib 是指向从我们的内部 Nexus 存储库下载的 Groovy-1.8.6 jar 的路径引用,我收到 NoClassDefFound 错误。我认为这可能是由于在 Antlib 中安装了 Ivy 导致类加载器在两个地方找到它。我只是在写这篇文章的时候想到了一些事情。我可能可以在分叉模式下运行 java 或做一些事情使其看不到/共享 Ant 的类路径。自从我与 Ant 和类加载器问题搏斗已经有几年了。由于该错误,我的项目有点拖欠,我正在寻找快速/简单的修复方法。
我刚刚尝试通过“java”cmd 在 cmd 行上运行我的 groovy,并在类路径中加载 groovy-all jar,我意识到我在那里也收到了 NoClassDefFound 错误。它与 Antlib 下的 Ivy 冲突无关。相反,我完全想念常春藤。我以为它包含在 Groovy-all.jar 中。我只需要一种巧妙的方法将 Ivy 从 AntLib 传递到我的 java 任务中,以使这一切正常运行。