gpt4 book ai didi

java - 如何在构建时从 Gradle 运行 Java 代码

转载 作者:行者123 更新时间:2023-12-01 13:20:28 36 4
gpt4 key购买 nike

我正在使用 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();
}
}
}

最佳答案

JavaExec Plugin似乎符合你的要求。

这允许您运行 main()方法以及您想要的任何 Java 代码——包括您喜欢的任何 JSON 模式生成。

other answer也几乎描述了你想要做什么。

改编自链接的文档:

apply plugin: 'java'

task generateJsonSchema(type: JavaExec) {
classpath = sourceSets.main.runtimeClasspath

main = 'package.Main'

// arguments to pass to the application
args 'appArg1'
}

根据 Jorn的评论如下:

You can depend the build task on your custom task: build.dependsOn generateJsonSchema if your custom task is defined as task generateJsonSchema(type: JavaExec) { ... }

关于java - 如何在构建时从 Gradle 运行 Java 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60604101/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com