2016-09-12 6 views
0

Я пытаюсь создать плагин Jira с помощью проекта.Класс AddProjectHook не найден

Вот мой код:

pom.xml:

<?xml version="1.0" encoding="UTF-8"?> 

<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 

    <modelVersion>4.0.0</modelVersion> 
    <groupId>myGroup</groupId> 
    <artifactId>project-template</artifactId> 
    <version>1.0</version> 

    <packaging>atlassian-plugin</packaging> 

    <dependencies> 
     <dependency> 
      <groupId>com.atlassian.jira</groupId> 
      <artifactId>jira-api</artifactId> 
      <version>${jira.version}</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>com.atlassian.jira.plugins</groupId> 
      <artifactId>project-templates-api</artifactId> 
      <version>${project.templates.version}</version> 
      <scope>provided</scope> 
     </dependency> 
    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>com.atlassian.maven.plugins</groupId> 
       <artifactId>maven-jira-plugin</artifactId> 
       <version>${amps.version}</version> 
       <extensions>true</extensions> 
       <configuration> 
        <productVersion>${jira.version}</productVersion> 
        <productDataVersion>${jira.version}</productDataVersion> 
       </configuration> 
      </plugin> 
      <plugin> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <configuration> 
        <source>1.7</source> 
        <target>1.7</target> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 

    <properties> 
     <jira.version>7.2.1</jira.version> 
     <project.templates.version>2.18</project.templates.version> 
     <amps.version>6.2.6</amps.version> 
    </properties> 
</project> 

Atlassian-plugin.xml частично:

<atlassian-plugin key="${project.groupId}.${project.artifactId}" name="${project.name}" plugins-version="2"> 
    .... 
    <project-blueprint key="my-project-template" weight="90"> 
     .... 
     <add-project> 
      <hook class="com.example.plugins.tutorial.MyAddProjectHook"/> 
      <descriptor file="/config/my-project-template-config.json"/> 
     </add-project> 
    </project-blueprint> 
</atlassian-plugin> 

MyAddProjectHook.java:

package com.example.plugins.tutorial; 

import com.atlassian.jira.blueprint.api.AddProjectHook; 
import com.atlassian.jira.blueprint.api.ConfigureData; 
import com.atlassian.jira.blueprint.api.ConfigureResponse; 
import com.atlassian.jira.blueprint.api.ValidateData; 
import com.atlassian.jira.blueprint.api.ValidateResponse; 

public class MyAddProjectHook implements AddProjectHook 
{ 
    @Override 
    public ValidateResponse validate(final ValidateData validateData) 
    { 
     ValidateResponse validateResponse = ValidateResponse.create(); 
     if (validateData.projectKey().equals("TEST")) 
     { 
      validateResponse.addErrorMessage("Invalid Project Key"); 
     } 

     return validateResponse; 
    } 

    @Override 
    public ConfigureResponse configure(final ConfigureData configureData) 
    { 
     ConfigureResponse configureResponse = ConfigureResponse.create().setRedirect("/issues/"); 

     return configureResponse; 
    } 
} 

После того, как я построил и запустил его, используя jira:run Я получаю исключение.

[INFO] [talledLocalContainer] 2016-09-12 17:32:23,211 http-nio-2990-exec-10 ERROR admin 1052x116x1 10vw23 172.20.49.83 /rest/project-templates/1.0/templates [c.a.p.r.c.error.jersey.ThrowableExceptionMapper] Uncaught exception thrown by REST service: java.lang.NoClassDefFoundError: com/atlassian/jira/blueprint/api/AddProjectHook 
[INFO] [talledLocalContainer] com.atlassian.util.concurrent.LazyReference$InitializationException: java.lang.NoClassDefFoundError: com/atlassian/jira/blueprint/api/AddProjectHook 
[INFO] [talledLocalContainer] at com.atlassian.util.concurrent.LazyReference.getInterruptibly(LazyReference.java:149) 
[INFO] [talledLocalContainer] at com.atlassian.util.concurrent.LazyReference.get(LazyReference.java:112) 
[INFO] [talledLocalContainer] at com.atlassian.util.concurrent.ResettableLazyReference.get(ResettableLazyReference.java:92) 
[INFO] [talledLocalContainer] at com.atlassian.jira.project.template.descriptor.ProjectTemplateModuleDescriptor.getModule(ProjectTemplateModuleDescriptor.java:103) 
[INFO] [talledLocalContainer] at com.atlassian.jira.project.template.ProjectTemplateManagerImpl.toProjectTemplate(ProjectTemplateManagerImpl.java:74) 
[INFO] [talledLocalContainer] at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) 
[INFO] [talledLocalContainer] at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175) 
[INFO] [talledLocalContainer] at java.util.Iterator.forEachRemaining(Iterator.java:116) 
[INFO] [talledLocalContainer] at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801) 
[INFO] [talledLocalContainer] at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481) 
[INFO] [talledLocalContainer] at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471) 
[INFO] [talledLocalContainer] at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708) 
[INFO] [talledLocalContainer] at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) 
[INFO] [talledLocalContainer] at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499) 
[INFO] [talledLocalContainer] at com.atlassian.jira.project.template.ProjectTemplateManagerImpl.getProjectTemplates(ProjectTemplateManagerImpl.java:43) 
[INFO] [talledLocalContainer] ... 3 filtered 
[INFO] [talledLocalContainer] at java.lang.reflect.Method.invoke(Method.java:498) 
[INFO] [talledLocalContainer] at com.atlassian.plugin.util.ContextClassLoaderSettingInvocationHandler.invoke(ContextClassLoaderSettingInvocationHandler.java:26) 
[INFO] [talledLocalContainer] at com.sun.proxy.$Proxy165.getProjectTemplates(Unknown Source) 
[INFO] [talledLocalContainer] ... 3 filtered 
[INFO] [talledLocalContainer] at java.lang.reflect.Method.invoke(Method.java:498) 
[INFO] [talledLocalContainer] at com.atlassian.plugin.osgi.bridge.external.HostComponentFactoryBean$DynamicServiceInvocationHandler.invoke(HostComponentFactoryBean.java:136) 
[INFO] [talledLocalContainer] at com.sun.proxy.$Proxy165.getProjectTemplates(Unknown Source) 
[INFO] [talledLocalContainer] at com.atlassian.jira.projecttemplates.service.ProjectTemplateServiceImpl.getProjectTemplatesGroupedByProjectType(ProjectTemplateServiceImpl.java:147) 
[INFO] [talledLocalContainer] at com.atlassian.jira.projecttemplates.service.ProjectTemplateServiceImpl.getProjectTemplatesGroupedByType(ProjectTemplateServiceImpl.java:102) 
[INFO] [talledLocalContainer] at com.atlassian.jira.projecttemplates.rest.ProjectTemplatesResource.getProjectTemplates(ProjectTemplatesResource.java:94) 
[INFO] [talledLocalContainer] ... 3 filtered 
[INFO] [talledLocalContainer] at java.lang.reflect.Method.invoke(Method.java:498) 
[INFO] [talledLocalContainer] ... 18 filtered 
[INFO] [talledLocalContainer] at com.atlassian.plugins.rest.module.RestDelegatingServletFilter$JerseyOsgiServletContainer.doFilter(RestDelegatingServletFilter.java:154) 
[INFO] [talledLocalContainer] ... 1 filtered 
[INFO] [talledLocalContainer] at com.atlassian.plugins.rest.module.RestDelegatingServletFilter.doFilter(RestDelegatingServletFilter.java:68) 
[INFO] [talledLocalContainer] ... 36 filtered 
[INFO] [talledLocalContainer] at com.atlassian.web.servlet.plugin.request.RedirectInterceptingFilter.doFilter(RedirectInterceptingFilter.java:21) 
[INFO] [talledLocalContainer] ... 24 filtered 
[INFO] [talledLocalContainer] at com.atlassian.labs.httpservice.resource.ResourceFilter.doFilter(ResourceFilter.java:59) 
[INFO] [talledLocalContainer] ... 32 filtered 
[INFO] [talledLocalContainer] at com.atlassian.jira.security.JiraSecurityFilter.lambda$doFilter$0(JiraSecurityFilter.java:76) 
[INFO] [talledLocalContainer] ... 1 filtered 
[INFO] [talledLocalContainer] at com.atlassian.jira.security.JiraSecurityFilter.doFilter(JiraSecurityFilter.java:74) 
[INFO] [talledLocalContainer] ... 16 filtered 
[INFO] [talledLocalContainer] at com.atlassian.plugins.rest.module.servlet.RestSeraphFilter.doFilter(RestSeraphFilter.java:37) 
[INFO] [talledLocalContainer] ... 20 filtered 
[INFO] [talledLocalContainer] at com.atlassian.jira.servermetrics.CorrelationIdPopulatorFilter.doFilter(CorrelationIdPopulatorFilter.java:30) 
[INFO] [talledLocalContainer] ... 5 filtered 
[INFO] [talledLocalContainer] at com.atlassian.fastdev.AutoReloadFilter.doFilter(AutoReloadFilter.java:63) 
[INFO] [talledLocalContainer] ... 8 filtered 
[INFO] [talledLocalContainer] at com.atlassian.web.servlet.plugin.request.RedirectInterceptingFilter.doFilter(RedirectInterceptingFilter.java:21) 
[INFO] [talledLocalContainer] ... 4 filtered 
[INFO] [talledLocalContainer] at com.atlassian.web.servlet.plugin.LocationCleanerFilter.doFilter(LocationCleanerFilter.java:36) 
[INFO] [talledLocalContainer] ... 29 filtered 
[INFO] [talledLocalContainer] at com.atlassian.jira.servermetrics.MetricsCollectorFilter.doFilter(MetricsCollectorFilter.java:25) 
[INFO] [talledLocalContainer] ... 28 filtered 
[INFO] [talledLocalContainer] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
[INFO] [talledLocalContainer] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
[INFO] [talledLocalContainer] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
[INFO] [talledLocalContainer] at java.lang.Thread.run(Thread.java:745) 
[INFO] [talledLocalContainer] Caused by: java.lang.NoClassDefFoundError: com/atlassian/jira/blueprint/api/AddProjectHook 
[INFO] [talledLocalContainer] at java.lang.ClassLoader.defineClass1(Native Method) 
[INFO] [talledLocalContainer] at java.lang.ClassLoader.defineClass(ClassLoader.java:763) 
[INFO] [talledLocalContainer] at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.findClass(BundleWiringImpl.java:2279) 
[INFO] [talledLocalContainer] at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1501) 
[INFO] [talledLocalContainer] at org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:75) 
[INFO] [talledLocalContainer] at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
[INFO] [talledLocalContainer] at org.apache.felix.framework.Felix.loadBundleClass(Felix.java:1844) 
[INFO] [talledLocalContainer] at org.apache.felix.framework.BundleImpl.loadClass(BundleImpl.java:937) 
[INFO] [talledLocalContainer] at com.atlassian.plugin.osgi.util.BundleClassLoaderAccessor.loadClass(BundleClassLoaderAccessor.java:45) 
[INFO] [talledLocalContainer] at com.atlassian.plugin.osgi.factory.OsgiPluginInstalledHelper.loadClass(OsgiPluginInstalledHelper.java:56) 
[INFO] [talledLocalContainer] at com.atlassian.plugin.osgi.factory.OsgiPlugin.loadClass(OsgiPlugin.java:207) 
[INFO] [talledLocalContainer] at com.atlassian.jira.project.template.descriptor.ProjectTemplateModuleDescriptor.checkClassExists(ProjectTemplateModuleDescriptor.java:219) 
[INFO] [talledLocalContainer] at com.atlassian.jira.project.template.descriptor.ProjectTemplateModuleDescriptor.createAddProjectModuleForTemplateElement(ProjectTemplateModuleDescriptor.java:145) 
[INFO] [talledLocalContainer] at com.atlassian.jira.project.template.descriptor.ProjectTemplateModuleDescriptor.createModuleFromXml(ProjectTemplateModuleDescriptor.java:134) 
[INFO] [talledLocalContainer] at com.atlassian.jira.project.template.descriptor.ProjectTemplateModuleDescriptor.access$100(ProjectTemplateModuleDescriptor.java:37) 
[INFO] [talledLocalContainer] at com.atlassian.jira.project.template.descriptor.ProjectTemplateModuleDescriptor$1.create(ProjectTemplateModuleDescriptor.java:59) 
[INFO] [talledLocalContainer] at com.atlassian.jira.project.template.descriptor.ProjectTemplateModuleDescriptor$1.create(ProjectTemplateModuleDescriptor.java:56) 
[INFO] [talledLocalContainer] at com.atlassian.util.concurrent.ResettableLazyReference$InternalReference.create(ResettableLazyReference.java:182) 
[INFO] [talledLocalContainer] at com.atlassian.util.concurrent.LazyReference$Sync.run(LazyReference.java:325) 
[INFO] [talledLocalContainer] at com.atlassian.util.concurrent.LazyReference.getInterruptibly(LazyReference.java:143) 
[INFO] [talledLocalContainer] ... 271 more 
[INFO] [talledLocalContainer] Caused by: java.lang.ClassNotFoundException: com.atlassian.jira.blueprint.api.AddProjectHook not found by com.atlassian.jira.plugins.project-templates-plugin [100] 
[INFO] [talledLocalContainer] at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1532) 
[INFO] [talledLocalContainer] at org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:75) 
[INFO] [talledLocalContainer] at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1955) 
[INFO] [talledLocalContainer] at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
[INFO] [talledLocalContainer] at org.apache.felix.framework.BundleWiringImpl.getClassByDelegation(BundleWiringImpl.java:1374) 
[INFO] [talledLocalContainer] at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1484) 
[INFO] [talledLocalContainer] at org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:75) 
[INFO] [talledLocalContainer] at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1955) 
[INFO] [talledLocalContainer] at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
[INFO] [talledLocalContainer] ... 292 more 

Вопрос: как исправить это исключение?

Я понимаю, что этот класс недоступен для некоторых ClasssLoader, но не знаю: должно ли оно быть в OSGi зависимостях или в пути к классам.

ответ

2

Проблема заключалась в том, что JIRA использовала различные версии библиотек API.

Смежные вопросы