I try to access the ServiceDeskPermissionService in a Plugin but is always returns the Exception java.lang.ClassNotFoundException: com.atlassian.servicedesk.api.permission.ServiceDeskPermissionService
This is my POM:
<dependencies>
<dependency>
<groupId>com.atlassian.jira</groupId>
<artifactId>jira-api</artifactId>
<version>${jira.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.atlassian.jira</groupId>
<artifactId>jira-core</artifactId>
<version>${jira.version}</version>
<scope>provided</scope>
</dependency>
<!-- Add dependency on jira-core if you want access to JIRA implementation classes as well as the sanctioned API. -->
<!-- This is not normally recommended, but may be required eg when migrating a plugin originally developed against JIRA 4.x -->
<dependency>
<groupId>com.atlassian.servicedesk</groupId>
<artifactId>jira-servicedesk-api</artifactId>
<version>4.7.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.konghq</groupId>
<artifactId>unirest-java</artifactId>
<version>3.6.01</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
<!-- WIRED TEST RUNNER DEPENDENCIES -->
<dependency>
<groupId>com.atlassian.plugins</groupId>
<artifactId>atlassian-plugins-osgi-testrunner</artifactId>
<version>2.0.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
<version>2.1.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.10</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpmime</artifactId>
<version>4.5.10</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.4.12</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>jsr311-api</artifactId>
<version>1.1.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.6</version>
</dependency>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>8.2.1.jre8</version>
<scope>provided</scope>
</dependency>
<!-- Added for Authenticator -->
<dependency>
<groupId>com.atlassian.crowd</groupId>
<artifactId>embedded-crowd-api</artifactId>
<version>2.10.4</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.atlassian.seraph</groupId>
<artifactId>atlassian-seraph</artifactId>
<version>2.6.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>1.10.19</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>com.atlassian.maven.plugins</groupId>
<artifactId>jira-maven-plugin</artifactId>
<version>${amps.version}</version>
<extensions>true</extensions>
<configuration>
<applications>
<application>
<applicationKey>jira-servicedesk</applicationKey>
<version>${servicedesk.version}</version>
</application>
</applications>
<allowGoogleTracking>false</allowGoogleTracking>
<extractDependencies>true</extractDependencies>
</configuration>
</plugin>
</plugins>
</build>
<properties>
<jira.version>8.7.1</jira.version>
<amps.version>8.1.0</amps.version>
<servicedesk.version>4.7.1</servicedesk.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
And this is how I try to access the ServiceDeskPermissionService
ServiceDeskPermissionService serviceDeskPermissionService = ComponentAccessor.getOSGiComponentInstanceOfType(ServiceDeskPermissionService.class);
The same happens when i try to access the CustomerService.
I also tried to access the ServiceDesk api by spring scanner
@ComponentImport
private final ApplicationProperties applicationProperties;
@ComponentImport
private final UserService userService;
@ComponentImport
private final CustomerService customerService;
@ComponentImport
private final UserManager userManager;
@ComponentImport
private final ServiceDeskManager serviceDeskManager;
@Inject
public HSETUAuthenticatorComponentImpl(final ApplicationProperties applicationProperties, final UserService userService, final CustomerService customerService, final UserManager userManager, final ServiceDeskManager serviceDeskManager)
{
this.applicationProperties = applicationProperties;
this.userService = userService;
this.customerService = customerService;
this.userManager = userManager;
this.serviceDeskManager = serviceDeskManager;
}
CustomerService will not be injected, and returns a classdefnotfoundexpection
POM excerpt:
<dependency>
<groupId>com.atlassian.servicedesk</groupId>
<artifactId>jira-servicedesk-api</artifactId>
<version>4.7.1</version>
<scope>provided</scope>
</dependency>
I use the jiraservicedesk from here https://www.atlassian.com/de/software/jira/service-desk/download, Version 4.7.1
I hope this information is sufficient to solve the problem. If further information is necessary I will gladly provide it.
Hi Carsten,
Thanks so much for your question.
These issues are really hard to debug and usually are easy to resolve. Let's try a few diagnostics first.
Check the compiled OSGi descriptors in the target/classes/META-INF/plugin-components/ directory.
Namely, the target/classes/META-INF/plugin-components/imports file - it should contain an entry for com.atlassian.servicedesk.api.permission.ServiceDeskPermissionService.
Same for CustomerService, the target/classes/META-INF/plugin-components/imports file should have an entry for it: com.atlassian.servicedesk.api.customer.CustomerService.
Next, check that the target/classes/META-INF/MANIFEST.MF file contains both of those with the correct version in the Import-Package section. You should have something like this:
com.atlassian.servicedesk.api.customer.CustomerService;version="[4.7,1)"
In order to import the ServiceDeskPermissionService, you might want to add the following @ComponentImport annotation to your class' member:
@ComponentImport
com.atlassian.servicedesk.api.permission.ServiceDeskPermissionService serviceDeskPermissionService;
Also, make sure you have the correct <Import-Package> section in the jira-maven-plugin plugin configuration in your pom.xml file:
<project>
<build>
<plugins>
<plugin>
<groupId>com.atlassian.maven.plugins</groupId>
<artifactId>jira-maven-plugin</artifactId>
<version>${amps.version}</version>
<extensions>true</extensions>
<configuration>
<instructions>
<Spring-Context>*</Spring-Context>
<Import-Package>
<!-- make sure you do not ignore the corresponding packages -->
*
</Import-Package>
</instructions>
</configuration>
</plugin>
</plugins>
</build>
</project>
The other mistake we often see is that the imported Maven dependency is wrong (which is not your case, but just to make things clear) - you should have a provided-scope dependency with the interfaces you are trying to autowire, e.g.:
<dependency>
<groupId>com.atlassian.servicedesk</groupId>
<artifactId>jira-servicedesk-api</artifactId>
<version>${servicedesk.version}</version>
<scope>provided</scope>
</dependency>
Also make sure that the version of the packages that you import are aligned (e.g. you do not import jira-servicedesk-api version 4.7.1 and in your OSGi descriptors you have classes requiring version 4.8.0 or alike).
On a sidenote, make sure the version of atlassian-spring-scanner-maven-plugin is of version 2.x (we are currently on 2.1.9), since there are some significant differences between v 1.x and v 2.x.
If it is correct, ensure the Spring configuration in META-INF/spring/spring.xml is up to date:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:atlassian-scanner="http://www.atlassian.com/schema/atlassian-scanner/2"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.atlassian.com/schema/atlassian-scanner/2
http://www.atlassian.com/schema/atlassian-scanner/2/atlassian-scanner.xsd">
<atlassian-scanner:scan-indexes/>
</beans>
Hope this gives you few starting points to resolve your issue. Please respond if I can help further.
Thank you,
Artem
Jira Service Desk team
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Sorry for the late reply. In the meantime I was involved in several other projects. In the meantime I have rejected this approach. Nevertheless, I would like to know what the cause of my problems is.
That's why I looked at @moofoo's suggestions today.
The target/classes/META-INF/plugin-components/imports file contains all imports.
The target/classes/META-INF/MANIFEST.MF file in the < Import Package> section does not contain any of these entries.
What reasons can there be for the absence of these entries?
I have set the dependency jira-servicedesk-api to version 4.7.1.
I have set the dependency atlassian-spring-scanner-maven-plugin to version 2.1.9.
The file META-INF/spring/spring.xml is missing.
What could be the reason for that?
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Online forums and learning are now in one easy-to-use experience.
By continuing, you accept the updated Community Terms of Use and acknowledge the Privacy Policy. Your public name, photo, and achievements may be publicly visible and available in search engines.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.