使用jdk8&运行job-dsl-plugin groovy 2.4.4- java.lang.IncompatibleClassChangeError

时间:2015-10-06 22:24:49

标签: java groovy jenkins jenkins-job-dsl groovy-eclipse

我正在使用job-dsl插件来自动创建jenkins作业。以下是我的maven配置。

<java.version>1.8</java.version>
<groovy.version>2.4.4</groovy.version>
<dsl.version>1.37</dsl.version>  
<groovy.eclipse.compiler.version>2.9.101</groovy.eclipse.compiler.version>
<groovy.eclipse.batch.version>2.3.7-01</groovy.eclipse.batch.version>

<plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.1</version>
    <configuration>
         <compilerId>groovy-eclipse-compiler</compilerId>
         <source>${java.version}</source>
         <target>${java.version}</target>
    </configuration>
    <dependencies>
        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy-eclipse-compiler</artifactId>
            <version>${groovy.eclipse.compiler.version}</version>
        </dependency>
        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy-eclipse-batch</artifactId>
            <version>${groovy.eclipse.batch.version}</version>
        </dependency>
   </dependencies>
</plugin>

我正在使用jdk8&amp; groovy-all 2.4.4,groovy-eclipse-compiler&amp;使用阴影插件生成超级jar。为了运行我的脚本,我添加了额外的类路径(在进程job-dsl / advanced-settings下)作为target / my-uber.jar。

当我在本地运行我的测试时,一切运行良好,但在Jenkins上遇到错误

java.lang.IncompatibleClassChangeError: the number of constructors  during runtime and compile time for    com.salesforce.dva.pipeline.generator.model.PkgType do not match. Expected -1 but got 2
at   groovy.lang.MetaClassImpl.selectConstructorAndTransformArguments(MetaClassImpl.java:1413)
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.selectConstructorAndTransformArguments(ScriptBytecodeAdapter.java:234)

我尝试更改groovy版本(更旧)和&amp;设置jdk 7&amp; 6但是所有这些都导致了同样的错误。

如何解决此问题?

1 个答案:

答案 0 :(得分:2)

Jenkins使用Groovy 1.8.x,因此Job DSL插件也使用Groovy 1.8.x.目前是1.8.9。对Groovy 2.x的更新仍有待处理,请参阅JENKINS-21249。建议将Groovy 1.8用于任何Job DSL项目。

由于Groovy 2.3是第一个正式支持Java 8的版本(参见Release notes for Groovy 2.3),因此建议将Java 7用于任何Groovy 1.8项目。