2012-06-06 2 views
0

Я использую библиотеку mojo-executor для вызова нескольких плагинов Maven из другого плагина Maven.Поддержка mojo-executor для зависимостей плагина?

Однако я не могу найти способ указать зависимости от плагинов, когда я их вызываю. Это проблема для maven-assembly-plugin, где мне нужно добавить файл дескриптора сборки в качестве зависимости. Добавление зависимости на другом уровне, похоже, не приводит к тому, что файл дескриптора попадает в путь класса плагина.

Любая идея, если это возможно, или если mojo-исполнитель может быть улучшен для обеспечения этой функции? Благодарю.

+0

Почему вы пытаетесь вызвать плагины maven изнутри maven плагин? Почему бы не использовать обычный файл pom и определить разные плагины в их соответствующей фазе жизненного цикла. – khmarbaise

+0

Если бы у Maven была поддержка mixins, обещанная несколько лет назад, мне не пришлось бы это делать. Я стараюсь не копировать несколько сотен строк кода конфигурации плагина через пять или шесть разных проектов. Я планирую разделить мета-плагин на фазу жизненного цикла. – drinian

+0

Поместите конфигурацию плагина и т. Д. В родительский pom, который содержит часть pluginManagement, которая решает вашу проблему. – khmarbaise

ответ

2

Mojo-executor выполнит mojo в среде без каких-либо классов. Вам нужно вручную добавить зависимость.

Dependency dep = new Dependency(); 
dep.setGroupId("groupId"); 
dep.setArtifactId("artifactId"); 
dep.setVersion("0.0.1-SNAPSHOT"); 

Plugin assembly = MojoExecutor.plugin(
    "org.apache.maven.plugins", 
    "maven-assembly-plugin", 
    "2.3"); 

assembly.addDependency(dep) 

MojoExecutor.executeMojo(assembly, 
    MojoExecutor.goal("single"), 
    ... 
) 
0

Вы знаете, что можно определить зависимости для плагинов, а также:

<plugin> 
    <groupId>com.soebes.maven.plugins.mlv</groupId> 
    <artifactId>maven-license-verifier-plugin</artifactId> 
    <version>0.4</version> 
    <dependencies> 
     <dependency> 
     <groupId>com.company.licenses</groupId> 
     <artifactId>allprojects</artifactId> 
     <version>1.0</version> 
     </dependency 
    </dependencies> 
    <configuration> 
     <!-- Optional you can put your configurations here --> 
    </configuration> 
    </plugin> 

Это поставит зависимость от пути к классам плагина. Это может решить вашу проблему.

+0

Пробовали, что не работает. – drinian

+0

Вы знаете, что предопределенные дескрипторы в maven-assembly-plugin работают через путь к классам? И что означает «не работает»? Сообщения об ошибках ? Вы можете дать более подробную информацию? – khmarbaise

+0

Предопределенные дескрипторы работают, но путь к классам сборки-плагина, по-видимому, не содержит зависимостей, перечисленных в плагине обертки. Плагин сборки говорит, что он не может найти именованный дескриптор сборки. – drinian

0

Может быть, вам необходимо поместить параметр requiresDependencyResolution в @Mojo аннотацию класса цели нашего Maven плагина. Что-то вроде этого:

@Mojo(name = "your-goal", defaultPhase = LifecyclePhase.xxx, 
    requiresDependencyResolution = ResolutionScope.COMPILE_PLUS_RUNTIME 
) 
public class YourGoalMojo... 

Это необходимо для ВАШЕГО Maven плагин, чтобы иметь зависимости разрешены и доступны до/его исполнения. README страница колдовского-исполнитель проекта упоминает об этом только после его примера, основанного Maven-зависимость-плагиным:

Дополнительной информации о аннотациях параметризации @Mojo можно найти здесь:

Смежные вопросы