Как использовать экземпляр класса, созданный другим плагином Jenkins - PullRequest
0 голосов
/ 24 апреля 2018

Я хотел бы использовать экземпляр класса, который создает другой плагин.

В частности, я хотел бы использовать экземпляр MQConnection, который mq-notifier-plugin создает и поддерживает.

Я объявил этот плагин как зависимость в POM:

    <dependency>
        <groupId>com.sonymobile.jenkins.plugins.mq</groupId>
        <artifactId>mq-notifier</artifactId>
        <version>1.2.5</version>
    </dependency>

Импортировал класс:

import com.sonymobile.jenkins.plugins.mq.mqnotifier.MQConnection;

Пыталсяполучите экземпляр и добавьте сообщение в шаг рабочего процесса:

..
public static class TestConnectionWorkflowStep extends AbstractSynchronousNonBlockingStepExecution<Void> {

    private static final long serialVersionUID = 1L;

    @StepContextParameter
    private transient Run build;

    @StepContextParameter
    transient TaskListener listener;

    @Override
    protected Void run() throws Exception {
        ..
        // fill in with exchange, routing_key, data, properties
        MQConnection.getInstance().addMessageToQueue(..);
    }
}

Он компилируется нормально.Я также дал указание классу MQConnection регистрировать всякий раз, когда добавляется сообщение.

Кажется, что ни одно из моих шагов шага сборки не добавляется в очередь экземпляра и просто молча продолжается.

И, как и ожидалось, я все еще вижу сообщения от mq-notifier-plugin, которые отображаются нормально.

Я пытался использовать Jenkins.getInstance().getPlugin(MQConnection.class), но не работает, так как MQConnection не является подклассом Plugin.

Как получить доступ к экземпляру MQConnection из моего плагина?

1 Ответ

0 голосов
/ 24 апреля 2018

getInstance (), вероятно, предполагает, что экземпляр был уже создан при запуске приложения, и он извлекает этот экземпляр. Поскольку вы вызываете метод из библиотеки, такого запуска не произошло, поэтому нет экземпляра, который нужно возвращать.

Посмотрите на код getInstance (), если можете, а также проверьте любой запуск приложения mq-notifier или основные методы в классе библиотеки. Посмотрите, как он создает экземпляр MQConnection, и вам нужно сделать то же самое.

Возможно, в другом проекте происходит внедрение зависимости.

Я хотел бы использовать экземпляр MQConnection, который создает и поддерживает плагин mq-notifier-plugin.

Вы либо должны будете запустить два приложения рядом и обмениваться данными друг с другом, либо вам придется самостоятельно выяснить, как создать экземпляр MQConnection.

Похоже, что ни одно из моих сообщений о шагах сборки не добавлено в очередь экземпляра и просто молча продолжается.

Это работает удаленно? Если у вас запущен удаленный экземпляр MQConnection, то простого вызова getInstance будет недостаточно, чтобы две отдельные программы могли общаться друг с другом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...