首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenRewrite:自定义配方和doAfterVisit方法的问题

OpenRewrite:自定义配方和doAfterVisit方法的问题
EN

Stack Overflow用户
提问于 2022-05-04 12:20:21
回答 1查看 32关注 0票数 0

我正在尝试使用以下逻辑来定制菜谱:

如果我为yaml文件中的属性找到了一个特定的值,那么我将向pom.xml添加一个maven依赖项。

原则上这似乎是件容易的事,但我不能让它起作用.

为此,我创建了以下菜谱:

代码语言:javascript
复制
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的新手,也许我不太明白该怎么做.

有什么想法吗?

我正在使用:

  • maven 3.6.3
  • 开放重写插件:4.23.0
  • 打开重写: 7.22.0
EN

回答 1

Stack Overflow用户

发布于 2022-05-04 16:51:01

我似乎找到了一种方法来做我想做的事:

使用doNext而不是doAfterVisit来粘合菜谱以添加Maven依赖项。此外,还缺少一些参数来添加到AddDependency菜谱中,如versionifOnlyUsing

代码语言:javascript
复制
    @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;
        }
      };
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72112894

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档