Как поделиться экземпляром одного и того же экземпляра в нескольких плагинах Maven Mojos?

Я реализую плагин Maven, который запускает и останавливает сервер базы данных в памяти. У меня два моджо ServerStart и ServerStop. В ServerStop я создаю экземпляр сервера базы данных и запускаю его, вызывая server.start(). В ServerStop Mojo я хотел бы, чтобы тот же экземпляр сервера вызывал server.stop(). Могу ли я каким-то образом создать экземпляр сервера, а затем внедрить его в мой Mojos?

Вот пример кода:

@MojoGoal("start")
public class StartServerMojo extends AbstractMojo {

    //How to instantiate and inject the server here?
    private Server server;

    public void execute() throws MojoExecutionException {
    server.start();
    }

}

@MojoGoal("stop")
public class StopServerMojo extends AbstractMojo {

    //How to instantiate and inject the server here?
    private Server server;

    public void execute() throws MojoExecutionException {
    server.stop();
    }

}

person Tomasz Błachowicz    schedule 29.02.2012    source источник
comment
2 вопроса. 1) Как вы хотите внедрить это в свое очарование? Например, у вас это где-то настроено? 2) Такой аннотации (@MojoGoal("stop")) я еще не видел. Можете ли вы показать мне, где вы его нашли? :)   -  person Andrew Logvinov    schedule 29.02.2012
comment
Андрей, у меня не настроено. Это мой вопрос, как его создать и ввести. Аннотации взяты из расширения JFrog Maven Anno Mojo (wiki.jfrog.org/ confluence/display/OSS/Maven+Anno+Mojo). Это позволяет использовать аннотации Java вместо аннотаций XDoclet.   -  person Tomasz Błachowicz    schedule 29.02.2012
comment
Хорошо, я вижу. Что нужно сделать, чтобы создать экземпляр сервера? Я имею в виду программно.   -  person Andrew Logvinov    schedule 29.02.2012


Ответы (2)


вы можете определить ссылку на сервер это

/**
 * @parameter
 * */
private Server server;

и настройте его в pom, где вы процитировали плагин

как:

<configuration>
<server>
 <serverField1>value1</serverField1>
 <serverField2>value2</serverField2>
 ...
</server>
</configuration>

см. здесь: http://maven.apache.org/guides/plugin/guide-java-plugin-development.html

person sinory    schedule 06.06.2012

Держите экземпляр сервера в pluginContext доступным в AbtractMojo. Просто помните, что вы не можете получить к нему доступ из отказоустойчивых тестов.

Другим подходом было бы превращение вашего плагина в форму контейнера для плагина Cargo maven аналогично тому, как я сделал это с фреймворком OSGi (https://github.com/TuomasKiviaho/org.codehause.cargo.container.osgi). Проект Cargo предназначен для тестирования контейнеров JavaEE, но для меня это не было проблемой.

person Tuomas Kiviaho    schedule 08.03.2012