Ich weiß, dass dies eine Art späte Antwort ist, aber für Leute, die hier landen, gibt es ein paar Dinge, die nicht in den anderen Posts erwähnt werden, die wichtig sind, wenn Plug- Ins für JIRA (und andere Atlassian-Produkte).
Erster JIRA oder vielmehr Atlassian, hat zwei Arten von Plug-In finden Sie Differences between Plugins1 and Plugins2
Da es ein ClassNotFoundException (und JIRA v4.0.1) war, nehme ich die Plug-in einer plugin2 ist, der in JIRA v4 und höher verwendet werden.
Ab JIRA v4 fungiert JIRA als OSGi-Container und daher ist Plugin2 ein OSGi-Bundle. In OSGi hat jedes Bundle eigene Klassenladeprogramme. Auf diese Weise können verschiedene Bundles unterschiedliche Versionen derselben JAR-Dateien enthalten und unter anderem auch hot bereitgestellt werden. Der Catch ist jedoch, dass nicht alle Pakete aus dem JDK standardmäßig für diese Klassenlader verfügbar sind. Dies wird unter Plugins, bundles and OSGi über die Atlassian Developers web page erläutert. Eine genauere Beschreibung finden Sie im Blog Exposing the boot classpath in OSGi bei Springsource. Der zweite Absatz dort hat sogar den Titel NoClassDefFoundError: com.sun ...
So viel für die Theorie. Bei der Entwicklung eines Plug-ins für JIRA mit dem Atlassian SDK wird Maven im Hintergrund verwendet, siehe Atlassian Plugin SDK Documentation. Es wird also eine pom.xml im Plug-in-Projekt geben. Um JDK-Pakete im Plugin zu enthalten, kann man einen <SystemProperties>
Tag der Maven-jira-Plugin hinzufügen (für andere Atlassian Produkte, gibt es eine entsprechende Maven Plugin), und stellen Sie die bootdelegation Eigenschaft (und Sie vielleicht möchten Java 1.6 für die maven-Compiler-Plugin) setzen:
...
<build>
<plugins>
<plugin>
<groupId>com.atlassian.maven.plugins</groupId>
<artifactId>maven-jira-plugin</artifactId>
<version>3.7.3</version>
<extensions>true</extensions>
<configuration>
<productVersion>${jira.version}</productVersion>
<productDataVersion>${jira.data.version}</productDataVersion>
<systemProperties>
<property>
<name>atlassian.org.osgi.framework.bootdelegation</name>
<value>sun.*,com.sun.*</value>
</property>
</systemProperties>
</configuration>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
...
</plugins>
</build>
...
die aufgeführten Pakete werden dann auf das Bündel zur Verfügung stehen. Beachten Sie jedoch, dass die Boot-Delegierung keine Lösung für alle Probleme ist und nur mit Einschränkungen verwendet werden sollte. Lesen Sie mehr unter Boot Delegation und Avoid Classloader Hacks.
Unter den Abhängigkeiten kann man setzt die jaxb-api Version benötigt:
...
<dependencies>
<dependency>
<groupId>com.atlassian.jira</groupId>
<artifactId>atlassian-jira</artifactId>
<version>${jira.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.atlassian.plugins.rest</groupId>
<artifactId>atlassian-rest-common</artifactId>
<version>2.5.0</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.2.4</version>
<scope>provided</scope>
</dependency>
...
</dependencies>
...
Es ist nicht immer nötig, explizit eine Abhängigkeit von jaxb-api zu haben. Zum Beispiel hat das atlassian-rest-common Plug-in oben eine transitive Abhängigkeit von jaxb-api. Wichtig ist, die Einstellung scope zu verstehen. Schauen Sie sich Setting OSGi Manifest Instructions in your Plugin (gleiche Seite wie Plugins, Bundles und OSGi aber weiter unten).
Die fasziniert kann mehr bei OSGi Alliance Specifications und OSGi Community Wiki lernen.
Auf welche JDK-Version bauen Sie auf? Auf welchem JDK läuft JIRA? Welche Version von JIRA? – skaffman
JDK-Version ist '1.6.0_15' & Jira-Version ist '4.0.1' Jira läuft auf dem gleichen Rechner, sollte also das gleiche JDK verwenden – ernesto
hey, ich kam acroos diese http://java.sun.com/products/ jdk/faq/faq-sun-packages.html okay, aber ich frage mich immer noch, warum es gescheitert – ernesto