You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Groovy DSL在多个契约间共享通用代码?

契约DSL共享Groovy代码的问题与解决方案

我尝试在多个Spring Cloud Contract契约间共享通用Groovy代码,将Groovy文件放入契约文件夹后导入时,出现如下编译错误:

[ERROR] Exception occurred while trying to evaluate the contract at path [SNIP]
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
file.groovy: 2: unable to resolve class Foo
 @ line 2, column 1.
   import Foo
   ^

1 error

    at org.codehaus.groovy.control.ErrorCollector.failIfErrors (ErrorCollector.java:292)
    at org.codehaus.groovy.control.CompilationUnit$ISourceUnitOperation.doPhaseOperation (CompilationUnit.java:910)
    at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations (CompilationUnit.java:692)
    at org.codehaus.groovy.control.CompilationUnit.compile (CompilationUnit.java:666)
    at groovy.lang.GroovyClassLoader.doParseClass (GroovyClassLoader.java:373)
    at groovy.lang.GroovyClassLoader.lambda$parseClass$2 (GroovyClassLoader.java:316)
    at org.codehaus.groovy.runtime.memoize.StampedCommonCache.compute (StampedCommonCache.java:163)
    at org.codehaus.groovy.runtime.memoize.StampedCommonCache.getAndPut (StampedCommonCache.java:154)
    at groovy.lang.GroovyClassLoader.parseClass (GroovyClassLoader.java:314)
    at groovy.lang.GroovyShell.parseClass (GroovyShell.java:572)
    at groovy.lang.GroovyShell.parse (GroovyShell.java:585)
    at groovy.lang.GroovyShell.parse (GroovyShell.java:597)
    at groovy.lang.GroovyShell.evaluate (GroovyShell.java:459)
    at groovy.lang.GroovyShell.evaluate (GroovyShell.java:504)
    at org.springframework.cloud.contract.verifier.util.ContractVerifierDslConverter.toObject (ContractVerifierDslConverter.java:157)

问题

是否可以直接从当前项目的契约DSL中共享Groovy代码?

解决方案

无法直接通过契约文件夹内的Groovy文件实现代码共享,可行的方法是将通用代码打包为Jar包,添加到spring-cloud-contract-maven-plugin的类路径中:

<plugin>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-contract-maven-plugin</artifactId>
    <dependencies>
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>my-stuff</artifactId>
            <version>1.0.0</version>
        </dependency>
    </dependencies>
</plugin>

通过这种方式即可导入Jar包中的类,实现契约间的代码共享。

内容的提问来源于stack exchange,提问作者Jakub Bochenski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 11:28:12