2016-07-07 7 views
2

Давайте представим, у меня есть следующий харизмы:Maven: Получить конфигурацию цели от выполнения элемента

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

Также у меня есть дескриптор плагина в П:

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

Для теста этого плагина я использую Maven-плагин -тестирование-жгут

И мой тестовый код:

@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() { 
    } 
}; 

Но когда я запускаю тест он терпит неудачу с Exception:

org.apache.maven.plugin.testing.ConfigurationException: Не удается найти конфигурацию элемент для плагина с артефактом {имя плагина}.

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) 

Когда я отлаживать источник мавена-плагин-тестирование-жгутов я заметил, что он прочитал конфигурацию из единственного корневого элемента плагина.

Как я могу заставить его прочитать конфигурацию из исполнительного элемента?

+0

Вы решили ситуацию? – Adam

+0

К сожалению нет. Я сделал обходной путь. –

+0

Да, я сочувствую. Я посмотрел на исходный код. Это очень просто, жестко закодировано, неконфигурируется. Но достаточно легко изменить в своих целях, если вы решили разветвить источник. – Adam

ответ

4

Добавление пустого <configuration></configuration> блок для проверки конфигурации плагина помог мне.

Попробуйте использовать эти DEPS:

<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 тестирование плагин не очень хорошо описан и выглядит багги ...

+0

Просто добавление зависимостей без разработки, если вам нужно, может бросить вас в адский ад. Пусть покупатель будет бдителен. Кроме того, OP уже включил тег конфигурации. – Adam

+0

У ОП есть тег конфигурации, но он встроен в выполнение. Чтобы установить проблему, достаточно добавить конфигурацию верхнего уровня. Зависимости - это дополнительные функции для устранения других проблем. Прежде чем перейти к этой ошибке, я уже добавил maven-compat и maven-plugin-test-harness. –

0

Есть два способа исправить эту проблему.

Изменить вызов lookupMojo("some-goal", pom) к lookupEmptyMojo("some-goal", pom)

Или внутри build -> plugins -> plugin добавить пустой <configuration></configuration> раздел.

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