Maven 插件:对象中的参数作为字段无法正常工作

maven plugin: parameter as field in object does not work properly

提问人:user2609605 提问时间:8/29/2023 更新时间:8/29/2023 访问量:22

问:

我为 maven 编写了一个插件,https://github.com/Reissner/latex-maven-plugin。 它在InjectionMojo

  @Parameter(name = "injections", defaultValue = "latexmkrc,chktexrc",
      property = "latex.injections")
  private Set<Injection> injections;`

效果很好。 我可以从命令行使用 default 和 he 属性。 命令行设置将覆盖所有设置。

然后我还有另一个参数,它是 :CfgLatexMojo

  @Parameter(name = "settings")
  protected Settings settings;

类本身有一个参数Settings

@Parameter(name = "targets", defaultValue = "chk,pdf,html", property = "latex.targets")//
  //private SortedSet<Target> targets;
  private String targets = "chk,pdf,html";

在这里,我观察到奇怪的事情: 如果我不初始化,我会得到一个, 虽然应该足够了。targets = "chk,pdf,html"NullPointerExceptiondefaultValue = "chk,pdf,html"

另外,该物业不起作用。或者也许我不知道如何正确调用。

还有更多奇怪的效果,但让我们先关注这些。

Maven 插件 参数传递

评论

0赞 Scott Kurz 9/19/2023
首先,你是否包括一个公共二传手?public setTargets(String)
0赞 user2609605 9/27/2023
是的,我做=: public void setTargets(String targets) { this.targets = targets.trim();
0赞 Scott Kurz 9/28/2023
认为这是一个有趣的问题。经过一番实验,我不确定这是否可能。在我看来,@Parameter注解的“属性”属性可能只有在参数注入 Mojo 时才会得到尊重,但当它被注入到另一个 Java 配置 bean 类时就不适用了,就像您尝试的那样。我不确定复制 Maven 优先级的直接方法:参数 XML 配置,然后是 sysprop,然后是项目 prop,然后是 defaultValue,就像您尝试做的那样。 (我想很难找到这方面的文档)。
0赞 Scott Kurz 9/28/2023
(续.....)显然,如果你能找到一个做类似事情的例子,或者问问 Maven 用户列表,这可能会有所帮助。另一个想法:你可以简单地在你的 Mojo 上实现 setter 方法来读取 sysprop。这并不等同于你最初的想法,你必须对每个 Mojo 都这样做,而不仅仅是对 Settings bean 进行一次。合并项目道具(在 pom 中)也会做更多的工作。OTOH,您可以随心所欲地实现它。许多人感到惊讶的是,CLI 上的 -Dx=y 没有优先于 XML 插件配置。您可以拥有自己的自定义逻辑。
0赞 Scott Kurz 9/28/2023
(如果这听起来很有趣,我可以发布一个答案作为示例)

答: 暂无答案