如何在Jenkins管道中为ant提供jar文件?

时间:2017-09-06 22:53:05

标签: ant jenkins-pipeline dita-ot

我已经整理了一个基本的Jenkins pipeline,它在大多数情况下完成了我的期望。

但是,我正在使用ant,它需要访问特定的jar文件。我已经指定了构建步骤:

stage('Build') {
  // Build the project
  env.PATH = "${tool 'ant'}/bin:${env.PATH}"
  sh 'ant -f dita-tools/build_all.xml -lib $WORKSPACE/dita-ot/lib:$WORKSPACE/dita-ot/lib/saxon'
 }

我在此管道中运行的构建失败并生成以下错误:

java.lang.ClassNotFoundException: org.dita.dost.module.GenMapAndTopicListModule

据我所知,这是因为ant无法访问dita ot中的dost.jar。我已经尝试过多种方式定义这个参数,包括专门引用dost.jar(我有一些jar包括)但是每次失败时都会出现同样的错误。

当我在Jenkins中组建一个独立的ant项目时,ant通过我上面提供的参数访问jar没有问题。有没有更好的方法让我在管道中提供这个参数/依赖?

更新 我为我的构建脚本添加了类路径的echo语句,并且能够验证在构建脚本中将jar添加到类路径确实有效。因此,对于所有意图和目的,ant可以访问目标的所有相关基础工具箱,但错误仍然存​​在。在这一点上,问题似乎与jenkins管道的工作原理有关,而不是与dita本身相关吗?

1 个答案:

答案 0 :(得分:0)

我假设你使用自定义插件,如果是,请确保你在 plugin.xml 中正确定义了你的jar:

<feature extension="dita.conductor.lib.import" file="lib/my.jar"/>

<强>更新

java.lang.ClassNotFoundException: org.dita.dost.module.GenMapAndTopicListModule

此错误表示在类路径中找不到主DITA-OT jar。所以这表明,这不是插件问题。

通常你不必设置类路径,Ant会为你做这件事。另请阅读Creating an Ant build script

请尝试这样的片段:

node {
    try {
        checkout scm
        stage('Build') {
            sh '''
                dir=$(pwd)
                curl [your-dita-ot-url] --output dita-ot.zip
                unzip -qq "$dir/dita-ot.zip"
                rm dita-ot.zip
                chmod +x ${WORKSPACE}/dita-ot/bin/ant
                ${WORKSPACE}/dita-ot/bin/ant -f ${WORKSPACE}/build.xml -Ddita.dir=$dir/dita-ot -Dbranch.name=$BRANCH_NAME
            '''
        }
    } catch (e) {
        currentBuild.result = "FAILED"
        throw e
    } finally {
        notifyBuild(currentBuild.result)
    }
}