【问题标题】:Maven: Get goal configuration from execution elementMaven:从执行元素获取目标配置
【发布时间】:2016-11-09 15:14:02
【问题描述】:

假设我有以下魔力:

@Mojo(name = "some-goal")
public class MyMojo {
    @Parameter(required = true)
    protected ComplexObject param;
    /*...*/
}

我在 pom 中也有插件的描述符:

<plugin>
  <!-- here artifact description -->
  <executions>
     <execution>
       <phase>...</phase>
       <goals><goal>some-goal</goal></goals>
       <configuration>
         <param>...</param>
       </configuration>
     </execution>
  </executions>
</plugin>

为了测试这个插件,我使用 ma​​ven-plugin-testing-harness

而我的测试代码是:

@Test
public void test() throws Exception {
    File pom = getFile("mix/pom.xml");

    MyMojo plugin = (MyMojo) rule.lookupMojo("some-goal", pom);
    /*....*/

}

规则在哪里:

@Rule
public MojoRule rule = new MojoRule() {
    @Override
    protected void before() throws Throwable {
    }

    @Override
    protected void after() {
    }
};

但是当我运行测试时它失败并出现异常:

org.apache.maven.plugin.testing.ConfigurationException: 找不到 artifactId 为 {plugin-name} 的插件的配置元素。

at org.apache.maven.plugin.testing.AbstractMojoTestCase.extractPluginConfiguration(AbstractMojoTestCase.java:619)
at org.apache.maven.plugin.testing.AbstractMojoTestCase.extractPluginConfiguration(AbstractMojoTestCase.java:582)
at org.apache.maven.plugin.testing.AbstractMojoTestCase.lookupMojo(AbstractMojoTestCase.java:353)
at org.apache.maven.plugin.testing.MojoRule.lookupMojo(MojoRule.java:164)

当我调试 ma​​ven-plugin-testing-harness 的源代码时,我注意到它仅从根插件元素读取配置。

如何强制它从执行元素中读取配置?

【问题讨论】:

  • 问题解决了吗?
  • 很遗憾没有。我做了解决方法。
  • 是的,我很同情。我查看了源代码。它非常简单,硬编码,不可配置。但是,如果您决定分叉源代码,则很容易根据自己的目的进行修改。
  • 在插件配置的顶层添加一个空配置块。

标签: java maven junit pom.xml mojo


【解决方案1】:

添加空的&lt;configuration&gt;&lt;/configuration&gt; 块来测试插件配置对我有帮助。

尝试使用这些部门:

<dependency>
    <groupId>org.apache.maven.plugin-testing</groupId>
    <artifactId>maven-plugin-testing-harness</artifactId>
    <version>3.3.0</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.codehaus.plexus</groupId>
    <artifactId>plexus-component-annotations</artifactId>
    <version>1.7.1</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.apache.maven</groupId>
    <artifactId>maven-compat</artifactId>
    <version>3.3.9</version>
</dependency>

Maven 插件测试没有很好地描述并且看起来有问题...

【讨论】:

  • 如果你需要它们,只是添加依赖项而不解决它们可能会让你陷入依赖地狱。买者自负。再加上 OP 已经包含了一个配置标签。
  • OP 确实有配置标签,但它嵌入在执行中。添加顶级配置足以解决问题。依赖项是解决其他问题的额外内容。在遇到此错误之前,我已经添加了 maven-compat 和 maven-plugin-testing-harness。
【解决方案2】:

有两种方法可以解决此问题。

把电话lookupMojo("some-goal", pom)改成lookupEmptyMojo("some-goal", pom)

或在build -&gt; plugins -&gt; plugin 内添加一个空的&lt;configuration&gt;&lt;/configuration&gt; 部分。

<plugin>
  <!-- here artifact description -->
  <configuration></configuration>
  <executions>
     <execution>
       <phase>...</phase>
       <goals><goal>some-goal</goal></goals>
       <configuration>
         <param>...</param>
       </configuration>
     </execution>
  </executions>
</plugin>

【讨论】:

    【解决方案3】:

    你是如何指定零件的

    <!-- here artifact description -->
    

    您是否指定了插件的 groupId 和 artifactId?如果不是这种情况,则不使用配置部分。这可能与原型生成的内容不完全正确有关 (https://issues.apache.org/jira/projects/MARCHETYPES/issues/MARCHETYPES-67?filter=allopenissues)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-06
      • 2020-09-06
      • 1970-01-01
      • 2010-10-27
      • 2013-07-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多