我正在尝试使用以下逻辑来定制菜谱:
如果我为yaml文件中的属性找到了一个特定的值,那么我将向pom.xml添加一个maven依赖项。
原则上这似乎是件容易的事,但我不能让它起作用.
为此,我创建了以下菜谱:
public class CustomRecipe extends Recipe {
public CustomRecipe() {}
@Override
protected TreeVisitor<?, ExecutionContext> getSingleSourceApplicableTest() {
return new HasSourcePath<>("**/application-*.yml");
}
@Override
public YamlVisitor<ExecutionContext> getVisitor() {
return new YamlIsoVisitor<ExecutionContext>() {
@Override
public Yaml.Mapping.Entry visitMappingEntry(final Yaml.Mapping.Entry entry, final ExecutionContext context) {
final Yaml.Mapping.Entry e = super.visitMappingEntry(entry, context);
if (e.getValue() instanceof Yaml.Scalar && ((Yaml.Scalar) e.getValue()).getValue().contains("ENC(")) {
// if jasypt usage is found in a .yml file then the Jasypt starter is added to pom.xml.
this.doAfterVisit(
new AddDependency("com.google.guava", "guava", "29.X", null, null, null,
null, null, null, null, null));
}
return e;
}
};
}
}在正确地将最终项目中的插件配置为运行上述配方并在调试模式下运行mvn rewrite:run命令之后,我注意到yaml访问者正确地运行了yaml文件属性,包括查找属性值,因此在this.doAfterVisit(...)方法中添加了maven食谱AddDependency。
但是,依赖项从未添加到项目的pom.xml中.
我是OpenRewrite的新手,也许我不太明白该怎么做.
有什么想法吗?
我正在使用:
发布于 2022-05-04 16:51:01
我似乎找到了一种方法来做我想做的事:
使用doNext而不是doAfterVisit来粘合菜谱以添加Maven依赖项。此外,还缺少一些参数来添加到AddDependency菜谱中,如version和ifOnlyUsing
@Override
public YamlVisitor<ExecutionContext> getVisitor() {
return new YamlIsoVisitor<ExecutionContext>() {
@Override
public Yaml.Mapping.Entry visitMappingEntry(final Yaml.Mapping.Entry entry, final ExecutionContext context) {
final Yaml.Mapping.Entry e = super.visitMappingEntry(entry, context);
if (e.getValue() instanceof Yaml.Scalar && ((Yaml.Scalar) e.getValue()).getValue().startsWith("ENC(")) {
CustomRecipe.this.doNext(new AddDependency("com.google.guava", "guava",
"29.X" , null, null, false, "org.junit.jupiter.api.*", null, null, false, null);
}
return e;
}
};
}https://stackoverflow.com/questions/72112894
复制相似问题