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 在执行插件时需要附加代码到类路径。
问题是如何访问合同 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 在执行插件时需要附加代码到类路径。