2 votes

Le scanner de ressorts ne détecte pas le composant

J'essaie d'écrire un plugin d'écoute d'événements pour Jira. Lorsque j'utilise l'ancienne méthode (ce que fait le dernier SDK Atlassian 6.2.9) et que je mets ces 2 lignes

<component key="eventListener" class="jira.plugins.listeners.MyEventListener"/>
<component-import key="eventPublisher" class="com.atlassian.event.api.EventPublisher"/>

et que j'essaie d'empaqueter le plugin, je reçois un avertissement disant que I cannot use component/component-import statement inside plugin descriptor file when Atlassian plugin key is set . Le dernier SDK utilise Spring Scanner, qui est ajouté au fichier pom.xml automatiquement lors de la création du squelette et que la documentation recommande fortement. Je supprime donc ces deux lignes du fichier atlassian-plugin.xml et j'essaie de les remplacer par les annotations correspondantes :

@Component
public class MyEventListener{
   @Inject
   public MyEventListener(@ComponentImport EventPublisher eventPublisher){
        eventPublisher.register(this);
   }

}

Je peux le compiler et l'empaqueter de cette façon, mais lorsque je l'installe sur une instance de Jira en cours d'exécution, la description du plugin indique ce qui suit This plugin has no modules . J'ai essayé de remplacer @Component par @Named, d'ajouter @ExportAsService à la classe, mais sans succès. Il semble que l'analyseur de Spring ne détecte pas ma classe comme un composant. Quelqu'un a-t-il réussi à résoudre ce problème ? J'ai écrit à la communauté atlassienne mais je n'ai pas eu de nouvelles jusqu'à présent.

0voto

hpetya1 Points 101

Configurez le plugin maven Spring Scanner pour qu'il s'exécute en mode verbeux, et assurez-vous que votre classe est traitée pendant la construction en utilisant les patrons d'inclusion.

    <plugin>
        <groupId>com.atlassian.plugin</groupId>
        <artifactId>atlassian-spring-scanner-maven-plugin</artifactId>
        <executions>
            <execution>
                <goals>
                    <goal>atlassian-spring-scanner</goal>
                </goals>
                <phase>process-classes</phase>
            </execution>
        </executions>
        <configuration>
            <includeExclude>+your.package.goes.here.*</includeExclude>
            <verbose>true</verbose>
        </configuration>
    </plugin>

Si tout va bien, après la construction, votre composant sera listé dans le fichier cible/classes/META-INF/plugin-components/component

Si le @Component est défini dans un module de bibliothèque (en tant que dépendance du plugin d'hébergement), vous pouvez également générer les métadonnées du composant à l'aide de l'élément de configuration

            <scannedDependencies>
                <dependency>
                    <groupId>your.library.group.id</groupId>
                    <artifactId>your-library</artifactId>
                </dependency>
            </scannedDependencies>

Remarque : il existe une différence entre le scanner à ressort V1 et V2, assurez-vous d'utiliser la bonne version. Voir référence .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X