Вот обновленная версия Mojo Executor, разработанная для Maven 3:
<code>package com.googlecode.boostmavenproject;
import java.util.Collections;
import org.apache.maven.execution.MavenSession;
import org.apache.maven.model.Plugin;
import org.apache.maven.plugin.MojoExecution;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.descriptor.PluginDescriptor;
import org.apache.maven.project.MavenProject;
import org.codehaus.plexus.util.xml.Xpp3Dom;
import org.apache.maven.plugin.BuildPluginManager;
import org.apache.maven.plugin.descriptor.MojoDescriptor;
import org.codehaus.plexus.configuration.PlexusConfiguration;
import org.codehaus.plexus.util.xml.Xpp3DomUtils;
import org.sonatype.aether.repository.RemoteRepository;
/**
* Executes an arbitrary mojo using a fluent interface. This is meant to be executed within the context of a Maven 2
* mojo.
*
* Here is an execution that invokes the dependency plugin:
* <pre>
* executeMojo(
* plugin(
* groupId("org.apache.maven.plugins"),
* artifactId("maven-dependency-plugin"),
* version("2.0")
* ),
* goal("copy-dependencies"),
* configuration(
* element(name("outputDirectory"), "${project.build.directory}/foo")
* ),
* executionEnvironment(
* project,
* session,
* pluginManager
* )
* );
*
* @see
http://code.google.com/p/mojo-executor/
* /
открытый класс MojoExecutor
{
/ **
* Точка входа для выполнения моджо
*
* @param plugin Плагин для выполнения
* @param цель Цель выполнить
* @param configuration Конфигурация исполнения
* @param env Среда исполнения
* @throws MojoExecutionException Если есть какие-либо исключения, выполняющие или выполняющие mojo
* /
public static void executeMojo (плагин плагина, строковая цель, конфигурация Xpp3Dom,
ExecutionEnvironment env) создает исключение MojoExecutionException
{
если (конфигурация == ноль)
бросить новое NullPointerException («конфигурация не может быть нулевой»);
пытаться
{
MavenSession session = env.getMavenSession ();
PluginDescriptor pluginDescriptor = env.getPluginManager (). LoadPlugin (плагин,
Коллекции. emptyList (), session.getRepositorySession ());
MojoDescriptor mojo = pluginDescriptor.getMojo (цель);
если (mojo == ноль)
{
выдать новое исключение MojoExecutionException («Не удалось найти цель» + «цель +» в плагине »
+ plugin.getGroupId () + ":"
+ plugin.getArtifactId () + ":"
+ plugin.getVersion ());
}
configuration = Xpp3DomUtils.mergeXpp3Dom (конфигурация,
toXpp3Dom (mojo.getMojoConfiguration ()));
MojoExecution exec = new MojoExecution (mojo, конфигурация);
env.getPluginManager (). executeMojo (сеанс, exec);
}
поймать (исключение е)
{
выбросить новое исключение MojoExecutionException («Невозможно выполнить mojo», e);
}
}
/ **
* Преобразует PlexusConfiguration в Xpp3Dom.
*
* @param config the PlexusConfiguration
* @ возврат Xpp3Dom представления конфигурации Plexus
* /
частный статический Xpp3Dom toXpp3Dom (конфигурация PlexusConfiguration)
{
Xpp3Dom result = new Xpp3Dom (config.getName ());
result.setValue (config.getValue (нуль));
for (имя строки: config.getAttributeNames ())
result.setAttribute (name, config.getAttribute (name));
для (PlexusConfiguration дочерний: config.getChildren ())
result.addChild (toXpp3Dom (ребенок));
вернуть результат;
}
/ **
* Свободно создает экземпляр {@link ExecutionEnvironment}
* @param mavenProject Текущий проект Maven
* @param mavenSession Текущий сеанс Maven
* @param pluginManager Менеджер плагинов Build
* @return Среда исполнения
* @throws NullPointerException, если mavenProject, mavenSession или pluginManager
* являются нулевыми
* /
публичная статическая ExecutionEnvironment executeEnvironment (MavenProject mavenProject,
MavenSession mavenSession,
BuildPluginManager pluginManager)
{
вернуть новое ExecutionEnvironment (mavenProject, mavenSession, pluginManager);
}
/ **
* Создает конфигурацию для цели, используя Элементы
* @param elements Список элементов для раздела конфигурации
* @return Элементы, преобразованные в Maven-родной формат XML
* /
общедоступная статическая конфигурация Xpp3Dom (Element ... elements)
{
Xpp3Dom dom = новый Xpp3Dom («конфигурация»);
для (Элемент е: элементы)
dom.addChild (e.toDom ());
вернуть дом;
}
/ **
* Определяет плагин без его версии* @param groupId Идентификатор группы * @param artifactId Идентификатор артефакта * @return Экземпляр плагина * / public static Plugin plugin (String groupId, String artifactId) {return plugin (groupId, artifactId, null);} / ** * Определяет плагин * @param groupId Идентификатор группы * @param artifactId Идентификатор артефакта * @param version Версия плагина * @return Экземпляр плагина * / public static Plugin plugin (String groupId, String artifactId, String version) {Плагин плагин = новый плагин ();plugin.setArtifactId (артефакт);plugin.setGroupId (идентификатор_группы);plugin.setVersion (вариант);возвратный плагин;} / ** * Перенос строки идентификатора группы в более читаемый формат * @param groupId Значение * @return Значение * / public static String groupId (String groupId) {return groupId;} / ** * Перенос строки идентификатора артефакта в более читаемый формат * @param artifactId Значение * @return Значение * / public static String artifactId (String artifactId) {return artifactId;} / ** * Перенос строки версии в более читаемый формат * @param version Значение * @return Значение * / public static String version (String version) {return version;} / ** * Переносит строку цели в более читаемый формат * @param goal Значение * @return Значение * / public static String goal (String goal) {return goal;} / ** * Перенос строки имени элемента в более читаемый формат * @param name Значение * @return Значение * / public static String name (String name) {return name;} / ** * Создает элемент с текстовым телом * @param name Имя элемента * @param value Текстовое значение элемента * @return Объект элемента * / public static Element element (String name, String value) {return new Element(имя, значение);} / ** * Создает элемент, связывающий дочерние элементы * @param name Имя элемента * @param elements Дочерние элементы * @return Объект Element * / public static Element element (String name, Element ... elements) {return newЭлемент (имя, элементы);} / ** * Класс обертки элемента для элементов конфигурации * / public static class Element {private final Element [] children;личное окончательное строковое имя;приватный финальный текст String;public Element (String name, Element ... children) {this (name, null, children);} public Element (String name, String text, Element ... children) {this.name = name;this.text = text;this.children = дети;} public Xpp3Dom toDom () {Xpp3Dom dom = новый Xpp3Dom (name);if (text! = null) {dom.setValue (text);} for (Элемент e: children) {dom.addChild (e.toDom ());} вернуть дом;}} / ** * Собирает информацию о выполнении Maven * / открытый статический класс ExecutionEnvironment {private final MavenProject mavenProject;закрытый финал MavenSession mavenSession;закрытый финал BuildPluginManager pluginManager;public ExecutionEnvironment (MavenProject mavenProject, MavenSession mavenSession, BuildPluginManager pluginManager) {if (mavenProject == null) генерировать новое исключение NullPointerException ("mavenProject не может быть нулевым");if (mavenSession == null) генерирует новое исключение NullPointerException ("mavenSession не может быть нулевым");if (pluginManager == null)бросить новое NullPointerException («pluginManager не может быть нулевым»);this.mavenProject = mavenProject;this.mavenSession = mavenSession;this.pluginManager = pluginManager;} public MavenProject getMavenProject () {return mavenProject;} public MavenSession getMavenSession () {return mavenSession;} public BuildPluginManager getPluginManager () {return pluginManager;}}}
Я попытаюсь внести свои изменения обратно в официальный плагин Mojo Executor.