【问题标题】:Running job-dsl-plugin using jdk8 & groovy 2.4.4- java.lang.IncompatibleClassChangeError使用 jdk8 和 groovy 2.4.4-java.lang.IncompatibleClassChangeError 运行 job-dsl-plugin
【发布时间】:2016-01-04 00:16:35
【问题描述】:

我正在使用 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 & groovy-all 2.4.4 ,groovy-eclipse-compiler & 一个 uber jar 是使用 shade 插件生成的。为了运行我的脚本,我添加了额外的类路径(在进程 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 版本(更旧)并设置 jdk 7 和 6,但所有这些都导致了相同的错误。

我该如何解决这个问题?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回复@daspilker。我尝试使用 goorvy-1.8.9、java 1.7、groovy-eclipse-compiler 2.9.1-01、groovy-batch-compiler 2.3.1-01,但仍然出现相同的错误“java.lang.IncompatibleClassChangeError: the number of com.salesforce.dva.pipeline.generator.model.PkgType 的运行时构造函数和编译时间不匹配。预期为 -1 但得到 2" 我是否必须将 groovy-eclipse-compiler 版本更改为其他版本?
    • 当我使用 groovy.eclipse.compiler.version -2.8.0-01 和 groovy.eclipse.batch.version 2.1.8-01 时,我的问题得到了解决。感谢您的帮助@daspilker。
    猜你喜欢
    • 2015-03-25
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2019-04-06
    • 1970-01-01
    • 1970-01-01
    • 2016-10-20
    • 2012-07-29
    相关资源
    最近更新 更多