【问题标题】:Change maven plugin configuration in runtime在运行时更改 Maven 插件配置
【发布时间】:2019-10-11 11:56:26
【问题描述】:

我有两个 maven 插件,AB,其中 A 定义在 before B

在A的执行中我想在B执行之前改变B的某个配置,两个插件配置在同一个阶段(编译)。

在插件A的代码中,我得到了我要更改配置的插件:

List<Plugin> plugins = project.getBuildPlugins().stream()
            .filter(plugin -> plugin.getKey().equals("cz.habarta.typescript-generator:typescript-generator-maven-plugin"))
            .collect(Collectors.toList());
    Plugin plugin = plugins.get(0);

其中 project 是 MavenProject 实例。

for (PluginExecution t: plugin.getExecutions ()) {
  if (t.getPhase (). equals ("compile")) {
    Xpp3Dom config = (Xpp3Dom) t.getConfiguration ();
    t.setConfiguration (changeConfig (config));
  } else {
    System.out.println ("Not compile phase");
  }
}

changeConfig()方法改变当前配置并返回一个新配置。

配置被改变了,但是这个改变并没有被插件B的执行所接受。

任何服从?

更新:

流程如下,插件A扫描项目依赖,对于每一个满足一系列条件的依赖,都必须在插件B中添加如下block > 配置:

<moduleDependency>
         <importFrom> value1 </importFrom>
         <importAs> value2 </importAs>
         <infoJson> value3 </infoJson>
          <npmPackageName> value4 </npmVersionRange>
</moduleDependency>

n 个块被添加到插件 B 的以下配置元素中:

<moduleDependencies>
   ...
</moduleDependencies>

Information about the configuration element of plugin B

问题是插件B没有采用新配置。

任何服从?

【问题讨论】:

    标签: java maven plugins runtime maven-plugin


    【解决方案1】:

    通常,在第一个插件中设置某些属性并在第二个插件的配置中使用这些属性会更干净、更容易。

    【讨论】:

    • 问题是我们的业务逻辑有点复杂。插件 A,扫描项目的 jars(依赖项),从自己的模块中提取信息。该信息将成为插件 B 配置的一部分,插件 B 是一个不属于它自己的插件。
    • 对不起,“插件 B 是不是它自己的插件”是什么意思?
    • 插件A是我们自己开发的,插件B是第三方的。
    • 好的,但是插件 B 不是通过 POM 中的 &lt;configuration&gt; 块参数化的吗?你不能在这里添加一些属性(如${myspecialconf}),然后通过插件A填充这些属性吗?
    • 在更新部分我稍微解释了这个问题。
    猜你喜欢
    • 2013-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-09
    相关资源
    最近更新 更多