【发布时间】:2020-06-21 13:15:23
【问题描述】:
我正在使用jsonschema-generator 根据我的 POJO 生成 JSON 模式文件。目前我正在通过在gradle build 步骤中运行的测试来完成它。这工作正常,但感觉不对,因为我正在做的不是测试任何东西。
我还找到了 this answer,它详细说明了如何在 gradle run 上运行它,但这也不理想,因为它会在每次应用程序启动时毫无意义地执行此操作,而不是在我构建时。
因此,有没有办法告诉 gradle(build.gradle)在构建时运行一段 Java 代码?
为了完整起见,这里是我要运行的代码:
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.victools.jsonschema.generator.Option;
import com.github.victools.jsonschema.generator.OptionPreset;
import com.github.victools.jsonschema.generator.SchemaGenerator;
import com.github.victools.jsonschema.generator.SchemaGeneratorConfig;
import com.github.victools.jsonschema.generator.SchemaGeneratorConfigBuilder;
import com.mypackage.MyClass;
import org.junit.jupiter.api.Test;
import java.io.PrintWriter;
import java.util.Map;
@SuppressWarnings({"FieldCanBeLocal", "rawtypes"})
public class JsonSchemaGenerator {
private final String SCHEMA_FOLDER = "schemas/";
private final Map<Class, String> schemaToGenerate = Map.of(
MyClass.class, "my-class.schema"
);
@Test
public void generateJsonSchema() throws Exception {
SchemaGeneratorConfigBuilder configBuilder = new SchemaGeneratorConfigBuilder(new ObjectMapper(), OptionPreset.PLAIN_JSON);
SchemaGeneratorConfig config = configBuilder.with(Option.DEFINITIONS_FOR_ALL_OBJECTS).build();
SchemaGenerator generator = new SchemaGenerator(config);
for (var entry : schemaToGenerate.entrySet()) {
JsonNode jsonSchema = generator.generateSchema(entry.getKey());
PrintWriter out = new PrintWriter(SCHEMA_FOLDER + entry.getValue());
out.println(jsonSchema.toPrettyString());
out.close();
}
}
}
【问题讨论】:
-
您可以创建一个脚本来执行 gradle build 然后 gradle run,并使用它而不只是 gradle build。
-
感谢您的建议@Christine。我认为我不能这样做,因为它会在 CI 框上的构建过程中调出我的应用程序,这会导致构建失败并超时,因此这在我的情况下不起作用。
-
然后你需要编辑构建文件,让它按照你想要的方式发生。
-
嗨@VladSchnakovszki,目前正在开发一个Maven插件(github.com/victools/jsonschema-generator/issues/53)。完成此操作后,您可能能够以某种方式从您的成绩构建中触发它。
标签: java gradle jsonschema2pojo