Spring Cloud Contract Gradle - 如何访问合同 DSL 中主源集中定义的常量?

Spring Cloud Contract Gradle - How to access constants defined in main source set in contract DSL?

问题是如何访问合同 DSL 中 main 源集中定义的常量。

我有一个简单的 class 保存常量 - 它是 main SourceSet 的一部分:

package io.mkrzywanski.pn.user.app.infra;

import lombok.AccessLevel;
import lombok.NoArgsConstructor;

@NoArgsConstructor(access = AccessLevel.PRIVATE)
public final class UserServiceConstants {
    public static final String USER_SERVICE = "user-service";

    public static final class Paths {
        public static final String VERSION = "v1";
        public static final String USERS = VERSION + "/users";
    }
}

我想在我的合同 class 中访问此 class 中定义的常量 class :

import io.mkrzywanski.pn.user.app.infra.UserServiceConstants
import org.springframework.cloud.contract.spec.Contract

Contract.make {
    request {
        method(GET())
        url("/v1/users/1")
    }
    response {
        headers {
            header 'Content-Type': 'application/json'
        }
        status(404)
        body([
                timestamp: "${nonEmpty()}",
                message  : "User with id ${fromRequest().path(2)} not found",
                status   : 404,
                serviceName: "${UserServiceConstants.USER_SERVICE}",
                path: "${UserServiceConstants.Paths.USERS}"
        ])
    }
}

然而,当在 gradle 中调用 generateContractTests 任务时,我收到编译错误:

@ line 3, column 1.
   import io.mkrzywanski.pn.user.app.infra.UserServiceConstants.
userDetailsNotFound.groovy: 3: unable to resolve class io.mkrzywanski.pn.user.app.infra.UserServiceConstants

我知道可以将带有 classes 的单独 jar 添加到测试范围,但我有点不明白为什么前者不起作用。

它不起作用,因为插件的类路径与项目类路径不同。您需要明确地告诉 Gradle / Maven 在执行插件时需要附加代码到类路径。