我在哪里可以找到带有gradle的org.jenkinsci.plugins.workflow.steps.FlowInterruptedException?

时间:2017-11-15 16:01:57

标签: jenkins gradle groovy jenkins-pipeline

我有以下build.gradle

apply plugin: 'groovy'
apply plugin: 'idea'
apply plugin: 'java'
repositories {
    mavenCentral()
    maven {
        url 'https://repo.jenkins-ci.org/releases'
    }
    maven {
        url 'https://repo.jenkins-ci.org/public'
    }
}
sourceSets {
    main {
        groovy {
            srcDirs = ['src']
        }
    }
    test {
        groovy {
            srcDirs = ['test']
        }
    }
}
dependencies {
    compile group: 'org.jenkins-ci.main', name: 'jenkins-core', version: '2.76'
    compile group: 'org.jenkins-ci.plugins.workflow', name: 'workflow-step-api', version: '2.13'
    compile 'com.cloudbees:groovy-cps:1.14'
    compile 'org.connectbot.jbcrypt:jbcrypt:1.0.0'
    compileOnly 'javax.servlet:javax.servlet-api:3.1.0'
    compile 'org.codehaus.groovy:groovy-all:2.4.12'
    testCompile 'junit:junit:4.12'
}

当我运行“gradle build”时,我收到以下错误:

> Task :compileGroovy FAILED
startup failed:
/home/user/myproject/SomeClass.groovy: 26: unable to resolve class org.jenkinsci.plugins.workflow.steps.FlowInterruptedException 
@ line 26, column 11.
        } catch (org.jenkinsci.plugins.workflow.steps.FlowInterruptedException flowInterruptedException) {
            ^
1 error
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':compileGroovy'.
> Compilation failed; see the compiler error output for details.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
* Get more help at https://help.gradle.org
BUILD FAILED in 1s
1 actionable task: 1 executed

就好像它没有看到“org.jenkinsci.plugins.workflow.steps.FlowInterruptedException”但是我添加了workflow-step-api,它应该找到它。

我做错了什么?怎么解决?

谢谢

2 个答案:

答案 0 :(得分:3)

'org.jenkins-ci.plugins.workflow:workflow-step-api:2.13'依赖项中有一个包含此内容的POM(取自here):

<packaging>hpi</packaging>

当您指向此依赖项时,Gradle检索的依赖项是hpi工件,而不是jar工件。这可以通过以下任务显示:

tasks.create('showDependencies') {
  doFirst {
    final config = configurations.getByName(sourceSets.getByName('main').compileClasspathConfigurationName)
    config.resolvedConfiguration.resolvedArtifacts.findAll { it.moduleVersion.id.group.contains('jenkins') }.each {
      println("Resolved dependency: id=${it.id}, extension=${it.extension}, classifier=${it.classifier}")
    }
  }
}

输出:

 > Task :showDependencies
Resolved dependency: id=jenkins-core.jar (org.jenkins-ci.main:jenkins-core:2.76), extension=jar, classifier=null
Resolved dependency: id=workflow-step-api.hpi (org.jenkins-ci.plugins.workflow:workflow-step-api:2.13), extension=hpi, classifier=null
Resolved dependency: id=cli.jar (org.jenkins-ci.main:cli:2.76), extension=jar, classifier=null
Resolved dependency: id=trilead-ssh2.jar (org.jenkins-ci:trilead-ssh2:build-217-jenkins-11), extension=jar, classifier=null
Resolved dependency: id=icon-set.jar (org.jenkins-ci.plugins.icon-shim:icon-set:1.0.5), extension=jar, classifier=null
Resolved dependency: id=remoting.jar (org.jenkins-ci.main:remoting:3.11), extension=jar, classifier=null
Resolved dependency: id=version-number.jar (org.jenkins-ci:version-number:1.4), extension=jar, classifier=null
Resolved dependency: id=crypto-util.jar (org.jenkins-ci:crypto-util:1.1), extension=jar, classifier=null
Resolved dependency: id=bytecode-compatibility-transformer.jar (org.jenkins-ci:bytecode-compatibility-transformer:1.8), extension=jar, classifier=null
Resolved dependency: id=structs.hpi (org.jenkins-ci.plugins:structs:1.5), extension=hpi, classifier=null
Resolved dependency: id=symbol-annotation.jar (org.jenkins-ci:symbol-annotation:1.5), extension=jar, classifier=null
Resolved dependency: id=annotation-indexer.jar (org.jenkins-ci:annotation-indexer:1.12), extension=jar, classifier=null
Resolved dependency: id=task-reactor.jar (org.jenkins-ci:task-reactor:1.4), extension=jar, classifier=null
Resolved dependency: id=commons-jelly.jar (org.jenkins-ci:commons-jelly:1.1-jenkins-20120928), extension=jar, classifier=null
Resolved dependency: id=commons-jexl.jar (org.jenkins-ci:commons-jexl:1.1-jenkins-20111212), extension=jar, classifier=null
Resolved dependency: id=memory-monitor.jar (org.jenkins-ci:memory-monitor:1.9), extension=jar, classifier=null
Resolved dependency: id=jmdns.jar (org.jenkins-ci:jmdns:3.4.0-jenkins-3), extension=jar, classifier=null
Resolved dependency: id=constant-pool-scanner.jar (org.jenkins-ci:constant-pool-scanner:1.2), extension=jar, classifier=null
Resolved dependency: id=dom4j.jar (org.jenkins-ci.dom4j:dom4j:1.6.1-jenkins-4), extension=jar, classifier=null

有几种方法可以使用Gradle的dependency management features来更好地处理依赖项。更改依赖关系的一种可能方法是添加带有扩展名的artifact dependency。这可能无法解决您的确切用例,具体取决于您希望依赖关系如何结束,但有希望指出您的方向:

compile(group: 'org.jenkins-ci.plugins.workflow', name: 'workflow-step-api', version: '2.13') {
  artifact {
    name = 'workflow-step-api'
    type = 'jar'
  }
}

作为旁注,在Jenkins插件生态系统中,Jenkins Maven HPI PluginJenkins Plugin Parent POM一起工作以进行依赖关系管理,因此您不会遇到这样的问题。

答案 1 :(得分:1)

显然我需要添加ext jar。这是我的构建文件

apply plugin: 'groovy'
apply plugin: 'idea'
apply plugin: 'java'
repositories {
    mavenCentral()
    maven {
        url 'https://repo.jenkins-ci.org/releases'
    }
    maven {
        url 'https://repo.jenkins-ci.org/public'
    }

}
sourceSets {
    main {
        groovy {
            srcDirs = ['src']
        }
    }
    test {
        groovy {
            srcDirs = ['test']
        }
    }
}
dependencies {
    compile group: 'org.jenkins-ci.main', name: 'jenkins-core', version: '2.76'
    compile group: 'org.jenkins-ci.plugins.workflow', name: 'workflow-step-api', version: '2.13', ext: 'jar'
    compile 'com.cloudbees:groovy-cps:1.14'
    compile 'org.codehaus.groovy:groovy-all:2.4.8'
    compileOnly 'javax.servlet:javax.servlet-api:3.1.0'
    testCompile 'junit:junit:4.12'
}