覆盖在另一个插件中声明的丛组件

Posted

技术标签:

【中文标题】覆盖在另一个插件中声明的丛组件【英文标题】:Overriding a plexus component declared in another plugin 【发布时间】:2013-07-25 17:24:22 【问题描述】:

我目前正在编写一个 Maven 插件,通过

自动发布模块 检测模块是否有应发布的更改 使用maven-release-plugin释放所有模块 调整所有受影响项目的依赖关系

我正在尝试使用 maven-invoker-plugin 对其进行测试,它在集成测试 poms 中使用以下设置:

  <build>
    <plugins>
      <plugin>
        <groupId>@project.groupId@</groupId>
        <artifactId>@project.artifactId@</artifactId>
        <version>@project.version@</version>
        <executions>
          <execution>
            <id>my-id</id>
            <phase>generate-sources</phase>
            <goals>
              <goal>my-goal</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

我遇到的障碍是 maven-dependency-plugin 禁止此版本,因为我在 pom.xml 中引用了一个 SNAPSHOT 插件(上面的 @project.version@ )。很公平。

我发现这个检查是在CheckDependencySnapshotsPhase 中进行的,它是一个丛组件:

@plexus.component role="org.apache.maven.shared.release.phase.ReleasePhase" role-hint="check-dependency-snapshots"

我能否以某种方式覆盖此组件并插入我自己的组件?或者,如何运行此集成测试而不被“无快照依赖”检查阻止?

【问题讨论】:

听起来很有趣。这个插件是开源的吗?我会对它感兴趣。 还没有,我不能对此做出承诺。 【参考方案1】:

原来答案就在我面前。无需在 IT 项目 pom.xml 中配置插件,只需指示maven-invoker-plugin 执行即可(略):

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-invoker-plugin</artifactId>
        <configuration>
          <goals>
            <goal>package</goal>
            <goal>$project.groupId:$project.artifactId:$project.version:inspect-changes</goal>
          </goals>
        </configuration>
      </plugin>

【讨论】:

以上是关于覆盖在另一个插件中声明的丛组件的主要内容,如果未能解决你的问题,请参考以下文章

替换 Maven 3 中的丛组件

访问 UI 组件并由 Xamarin 中的另一个线程覆盖它

Vue动态组件覆盖

如何在扩展组件上覆盖 className?

vuejs的组件化开发中怎么自定义class覆盖原有样式?

如何防止外部 CSS 覆盖 Web 组件样式