noclassdeffoundError

Status
Nicht offen für weitere Antworten.

noisebreath

Bekanntes Mitglied
Hi,

er schmeißt mir den noclassdeffoundError für eine Abstract Class die ich benutze. Diese Wiederum wird in einem Projekt definiert dass ich in eclipse eingebunden habe und unter Projects im Java Build Path eingebunden habe. Daher konnte ich die Class auch importieren.
Daher verstehe ich nicht warum er mir zur laufzeit den error schmeißt. muss ich mehr machen als das projekt im Java Build Path einzubinden? Mich erstaunt es.

lg
noise
 
S

SlaterB

Gast
schon mal probeweise zwei neue Projekte angelegt,
in einem eine ganz kleine Klasse

class A {

}

definiert und im anderen Projekt verwendet?

class B {
public static void main(String[] args)
{
A a = new A();
}
}


--------

ist die .class-Datei real im Dateisystem vorhanden, Project clean usw?
 

Koringar

Bekanntes Mitglied
Es könnte sein das er manchmal den Pfad zu dem Projekt nicht findet, warum ka. Das ist bei z.B. RCP der Fall. Versuche mal das Projekt wo die Abtrakteklasse zu einer Jar zumachen und importiere sie dann in dein Projekt wo du sie verwenden willst.
 

noisebreath

Bekanntes Mitglied
es gibt bei mir schon ein projekt das objekte von einem anderen benutzt. das funktioniert also gerell schon bei mir. clean hatte ich auch schon diverse male probiert und hilft nicht.
ich werd das mit dem jar später mal versuchen..
 

Wildcard

Top Contributor
Wenn du sagst Laufzeit, dann meinst du welchen Kontext? Aus der IDE mit einer bestimmten JRE? Ausserhalb der IDE? In einem wie auch immer gearteten Container (OSGi, Tomcat,..)?
 

noisebreath

Bekanntes Mitglied
hi,

also im moment spuckt er mir keinen classdeffounderror mehr aus, aber er verhält sich generell immer gleich.
sobald in meinem programm die class instantiiert wird ,in der auch ein Array der besagten AbstractClass als Attribut gebildet wird, beendet er das program. Im moment wirft er zu dem Zeitpunkt wie gesagt keinen error mehr aber ich denke das ist nur ein anzeigefehler.
Jedenfalls funktioniert das rumhantieren mit der Abstractclass in einem anderen TestProjekt, welches kein Rcp ist wunderbar. Ich versuch jetzt die Sache mit dem jar aus. dann geb ich bescheid ob es was geändert hat.

lg
 

noisebreath

Bekanntes Mitglied
hab ein jar draus gemacht. gibt mir beim erstellen einiges an warnings:

JAR export finished with warnings. See details for additional information.
Problem writing text2onto/bin/org/ontoware/text2onto/algorithm/concept/CValueConceptExtraction.txt to JAR: duplicate entry: org/ontoware/text2onto/algorithm/concept/CValueConceptExtraction.txt
duplicate entry: org/ontoware/text2onto/algorithm/concept/CValueConceptExtraction.txt
Problem writing text2onto/bin/org/ontoware/text2onto/algorithm/relation/AbstractPatternRelationExtraction.txt to JAR: duplicate entry: org/ontoware/text2onto/algorithm/relation/AbstractPatternRelationExtraction.txt
duplicate entry: org/ontoware/text2onto/algorithm/relation/AbstractPatternRelationExtraction.txt
Problem writing text2onto/bin/org/ontoware/text2onto/algorithm/relation/AbstractWordnetRelationExtraction.txt to JAR: duplicate entry: org/ontoware/text2onto/algorithm/relation/AbstractWordnetRelationExtraction.txt
duplicate entry: org/ontoware/text2onto/algorithm/relation/AbstractWordnetRelationExtraction.txt
Problem writing text2onto/bin/org/ontoware/text2onto/algorithm/relation/causal/AbstractCausalRelationExtraction.txt to JAR: duplicate entry: org/ontoware/text2onto/algorithm/relation/causal/AbstractCausalRelationExtraction.txt
duplicate entry: org/ontoware/text2onto/algorithm/relation/causal/AbstractCausalRelationExtraction.txt
Problem writing text2onto/bin/org/ontoware/text2onto/algorithm/relation/causal/CausalRelationExtraction.txt to JAR: duplicate entry: org/ontoware/text2onto/algorithm/relation/causal/CausalRelationExtraction.txt
duplicate entry: org/ontoware/text2onto/algorithm/relation/causal/CausalRelationExtraction.txt
Problem writing text2onto/bin/org/ontoware/text2onto/algorithm/relation/general/SubcatRelationInstanceExtraction.txt to JAR: duplicate entry: org/ontoware/text2onto/algorithm/relation/general/SubcatRelationInstanceExtraction.txt
duplicate entry: org/ontoware/text2onto/algorithm/relation/general/SubcatRelationInstanceExtraction.txt
Problem writing text2onto/bin/org/ontoware/text2onto/algorithm/relation/partOf/AbstractPartOfRelationExtraction.txt to JAR: duplicate entry: org/ontoware/text2onto/algorithm/relation/partOf/AbstractPartOfRelationExtraction.txt
duplicate entry: org/ontoware/text2onto/algorithm/relation/partOf/AbstractPartOfRelationExtraction.txt
Problem writing text2onto/bin/org/ontoware/text2onto/algorithm/relation/partOf/PatternPartOfRelationExtraction.txt to JAR: duplicate entry: org/ontoware/text2onto/algorithm/relation/partOf/PatternPartOfRelationExtraction.txt
duplicate entry: org/ontoware/text2onto/algorithm/relation/partOf/PatternPartOfRelationExtraction.txt
Problem writing text2onto/bin/org/ontoware/text2onto/algorithm/relation/partOf/WordnetPartOfRelationAlgorithm.txt to JAR: duplicate entry: org/ontoware/text2onto/algorithm/relation/partOf/WordnetPartOfRelationAlgorithm.txt
duplicate entry: org/ontoware/text2onto/algorithm/relation/partOf/WordnetPartOfRelationAlgorithm.txt
Problem writing text2onto/bin/org/ontoware/text2onto/algorithm/taxonomic/subrelationOf/AbstractRelationClassification.txt to JAR: duplicate entry: org/ontoware/text2onto/algorithm/taxonomic/subrelationOf/AbstractRelationClassification.txt
duplicate entry: org/ontoware/text2onto/algorithm/taxonomic/subrelationOf/AbstractRelationClassification.txt
Problem writing text2onto/bin/org/ontoware/text2onto/bayes.zip to JAR: duplicate entry: org/ontoware/text2onto/bayes.zip
duplicate entry: org/ontoware/text2onto/bayes.zip
Problem writing text2onto/bin/org/ontoware/text2onto/gui/jgraph.zip to JAR: duplicate entry: org/ontoware/text2onto/gui/jgraph.zip
duplicate entry: org/ontoware/text2onto/gui/jgraph.zip
Problem writing text2onto/bin/org/ontoware/text2onto/util/algorithms.xml to JAR: duplicate entry: org/ontoware/text2onto/util/algorithms.xml
duplicate entry: org/ontoware/text2onto/util/algorithms.xml
Problem writing text2onto/bin/org/ontoware/text2onto/util/google/patterns.xml to JAR: duplicate entry: org/ontoware/text2onto/util/google/patterns.xml
duplicate entry: org/ontoware/text2onto/util/google/patterns.xml

wenn ich das exportierte Jar einbinde anstatt das projekt selber, funktioniert das programm leider noch immer nicht... also ich bin hier am ende meines lateins..
 

Koringar

Bekanntes Mitglied
Hi,

also du willst also dann RCP machen. Da kann ich dir sagen, dass man da nicht auf ein anderes Projekt verweisen kann, da MUSS man eine Jar bilden (die Warnings sollten eigentlich egal sein, du sollstes sie aber trotzdem bereinigen).
Diese muss dann in dein Projekt, dann musst du aber auch noch in der 'plugin.xml' was einstellen. Und zwar unter dem Reiter 'Runtime' bei 'Classpath' muss du die Jar noch adden und alle Bibliotheken die dieses Jar braucht.
Das ist erstmal alles was du machen muss, wenn du es unter Eclipse zum laufen bekommen willst, willst du es dann eigenständig zum laufen bekommen musste da noch mehr machen.
 

noisebreath

Bekanntes Mitglied
hm.. also unter Runtime - ClassPath kann ich irgendwie nur das machen:
"Specify the libraries and folders that constitute the plug-in classpath. If unspecified, the classes and resources are assumed to be at the root of the plug-in."
Außer new und add ist nichts auswählbar.
wenn ich da auf add gehe hab ich eigentlich nur die verzeichnisstruktur meines pluginprojekts zur auswahl und kann nicht irgendwelche jars ausserhalb adden. auch wenn ich das jar in den srcfolder packe zeigt er es mir nicht in dem ordner zur auswahl an.

lg
 

noisebreath

Bekanntes Mitglied
also hab jetzt einfach n ordner lib im plguin projekt gemacht und dort die beiden jars reingemacht. die beiden jars (vorher projekte) haben selbtständig eigene jars einbinden muessen. die information ist in den beiden jars im classpath drinnen. dann hab ich unter runtime classpath die beiden geadded aber leider funktioniert es noch immer an der gleichen stelle wie vorhin nicht. kann es sein dass ich alle jars die vorher in den beiden neu eingebundenen jars drin waren explizit wieder einbinden muss obwohl im classpath der beiden jars die informationen korrekt für die anderen stehen?

lg
 

noisebreath

Bekanntes Mitglied
jar hier jar bla.. ^^ falls unverständlich ist was ich geschrieben habe, einfach sagen dann formulier ich es klarer ;)
 

Wildcard

Top Contributor
Ach das ist ein OSGi Projekt? Sind deine Abhängigkeiten auch Bundles? Wenn ja, dann musst du sie einfach im Manifest als required bundles eintragen.
 

noisebreath

Bekanntes Mitglied
kein osgi (auch wenn ich das nicht wirklich kenne). ist einfach ein plugin in eclipse kreiiert und will aus der api eines anderen projekts dinge benutzen.
was sind bundles? ich habe von 2 programmen den sourcecode in 2 projekte innerhalb meiner workspace gepackt. diese projekte binden ihrerseits jars ein auf deren api sie zugreifen. nun hatte ich in mein plugin die beiden projekte eingebunden. ihr habt gesagt dass geht bei plugins nicht. daraufhin hab ich aus den 2 projekten jar 1 und jar 2 gemacht und eingebunden. in deren classpath-dateien stehen informationen der form : (bsp jar 1)

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="lib" path="E:/programms/text2onto-091107-noinstaller/3rdparty/aclibico.jar"/>
<classpathentry kind="lib" path="E:/programms/text2onto-091107-noinstaller/3rdparty/gnu-regexp-1.0.8.jar"/>
<classpathentry kind="lib" path="E:/programms/text2onto-091107-noinstaller/3rdparty/jena.jar"/>
<classpathentry kind="lib" path="E:/programms/text2onto-091107-noinstaller/3rdparty/je-3.1.0.jar"/>
<classpathentry kind="lib" path="E:/programms/text2onto-091107-noinstaller/3rdparty/utilities.jar"/>
<classpathentry kind="lib" path="E:/programms/text2onto-091107-noinstaller/3rdparty/gate/heptag.jar"/>
<classpathentry kind="lib" path="E:/programms/text2onto-091107-noinstaller/3rdparty/jpedal/jpedal.jar"/>
<classpathentry kind="lib" path="E:/programms/text2onto-091107-noinstaller/3rdparty/jpedal/bcprov-jdk14-119.jar"/>
<classpathentry kind="lib" path="E:/programms/text2onto-091107-noinstaller/3rdparty/jpedal/cid.jar"/>
<classpathentry kind="lib" path="E:/programms/text2onto-091107-noinstaller/3rdparty/jpedal/jai_core.jar"/>
<classpathentry kind="lib" path="E:/programms/text2onto-091107-noinstaller/3rdparty/google/googleapi.jar"/>
<classpathentry kind="lib" path="E:/programms/text2onto-091107-noinstaller/3rdparty/jwnl/jwnl.jar"/>
<classpathentry kind="lib" path="E:/programms/text2onto-091107-noinstaller/3rdparty/kaon/apionrdf.jar"/>
<classpathentry kind="lib" path="E:/programms/text2onto-091107-noinstaller/3rdparty/kaon/datalog.jar"/>
<classpathentry kind="lib" path="E:/programms/text2onto-091107-noinstaller/3rdparty/kaon/kaonapi.jar"/>
<classpathentry kind="lib" path="E:/programms/text2onto-091107-noinstaller/3rdparty/kaon/query.jar"/>
<classpathentry kind="lib" path="E:/programms/text2onto-091107-noinstaller/3rdparty/kaon/rdfapi.jar"/>
<classpathentry kind="lib" path="E:/programms/kaon2.jar"/>
<classpathentry kind="lib" path="E:/programms/jdom.jar"/>
<classpathentry combineaccessrules="false" kind="src" path="/Gate"/>
<classpathentry kind="output" path="bin"/>
</classpath>

Ich hab jar 1 und jar 2 anstatt der projekte eingebunden und wie verordnet unter runtime-classpath die beiden jars eingebunden. (ich habe beide jars in einen unterordner lib meines plugins gepackt)

Wie gesagt funktioniert es leider immer noch nicht und ich bin mim latein am ende. mit der aussage bundle kann ich leider nicht viel anfangen...

lg
noise
 
Zuletzt bearbeitet:

Wildcard

Top Contributor
PlugIns sind OSGi Bundles und Eclipse läuft in einem OSGi Container. Da jedes PlugIn also ein Bundle ist musst du im Manifest dein zweites PlugIn als required bundle eintragen (keine Angst, dafür gibt es einen grafischen Editor, einfach mal die Manifest.MF anklicken).
Der normale Java Build Path greift nämlich in der OSGi Runtime nicht mehr, da zählt nur noch das Manifest.
 

noisebreath

Bekanntes Mitglied
ich hab kein 2. plugin...
also wenn ich das richtig verstanden hab :
plugins sind osgi bundles im osgi container. in dem läuft auch eclipse, aber eclipse selber ist kein osgi bundle oder?
ich hab nur ein plugin in eclipse gemacht und will keine weiteren plugins einbinden sondern ganz normale java projekte mit sourcecode auf den ich dann zugreifen will..
 
Zuletzt bearbeitet:

noisebreath

Bekanntes Mitglied
übrigens hab ich ausprobiert ob er objekte aus den 2nd hand jars (also jars die in den beiden projekten eingebunden waren,die ich zu jar1 und jar2 gemacht habe) auflösen kann, aber das geht wohl nicht:

The type org.semanticweb.kaon2.api.KAON2Exception cannot be resolved. It is indirectly referenced from required .class files

Könnte es sein, dass er die objekte aus jar 1 auflösen kann, aber nicht die abhängigkeiten dahinter?
nach dem motto: ich greife auf obj 1 von jar 1 zu, welches aber selber auf ein objekt einer weiteren jar zugreift.
 
Zuletzt bearbeitet:

Wildcard

Top Contributor
Eclipse bezeichnet nur die Plattform. Eclipse Equinox ist eine Implementierung der OSGi Spezifikation und stellt damit den OSGi Container. Dann werden einige Bundles in den Container geladen die den Eclipse spezifischen Teil liefern (auswerten der plugin.xml zb). Die ganze Funktionalität sind dann einfach PlugIns. Sei es die Java IDE, die Oberfläche, die Hilfe, die C IDE, die Problems View,... alles PlugIns.

Wenn deine Projekte keine Bundles sind, dann brauchst du jars die in dein PlugIn packst und dann musst du sie im Manifest Editor als extra classpath entries eintragen.
Du kannst aus deinen jars aber auch sehr einfach OSGi Bundles machen (das geht mit eclipse sogar automatisch) die du dann als required Bundles einträgst.
 

noisebreath

Bekanntes Mitglied
also ich habs bis heute noch nicht hinbekommen.
ehrlich gesagt denke ich auch nicht dass ich es noch hinbekomme. dafür hab ich einfach nicht genug ahnung von rcp.
ich hab auch mal versucht einfach die srces von dem projekt dass ich einbinden will in ein Plugin project einzubinden. das an sich funktioniert auch so wie es ausschaut, aber wenn ich dieses plugin dann in meinem hauptplugin als required project in den buildpath einbinde funktioniert es leider trotzdem nicht.
er erkennt wie gesagt das objekt aber terminiert einfach immer wenn er an dem punkt ankommt wenn ich das objekt instantiiere.

Code:
	public Object execute(ExecutionEvent event) throws ExecutionException {
		
		//EntropyConceptExtraction a = new EntropyConceptExtraction();
                EntropyConceptExtraction a = null;

		IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event);
		MessageDialog.openInformation(
				window.getShell(),
				"OWLExtraction Plug-in",
				"Hello, Eclipse world");
		return null;
	}

so funktionierts dass er mir ein window anzeigt. sobald ich aber auskommentiertes reinnehme terminiert es bzw er zeigt mir kein window an.das rcp an sich bricht nicht ab. beim debuggen sehe ich auch das er nicht bis IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event); kommt.

dachte ich versuche das mal weil es hieß das man in plugins keine projekte adden kann aber plugins wohl schon. (?)

(Randinformation:die Activator class etc musste ich rausnehmen weil er mir nach dem import der srces fehler wegen jface etc kamen)

danke dennoch für die zahlreichen hilfsversuche :)

ich hätte noch eine frage: gibt es eine Möglichkeit ein java projekt in ein rcp einzubinden und so funktionalität ins rcp einzubinden oder muss es ein plugin sein?

lg
 
Zuletzt bearbeitet:

noisebreath

Bekanntes Mitglied
neue idee/vermutung/verzweifelung ^^ : muss ich wenn ich in einem plugin ein anderes einbinde alle classes mit extension points angeben (weiss wohlgemerkt nicht genau wie die funktionieren), so dass reine classpath infos nicht ausreichen?
 

Wildcard

Top Contributor
Zunächst musst du aus deinem nicht-plugin-projekt ein jar machen. Dieses jar stopfst du dann in zB ein Verzeichnis 'lib' in deinem Plugin. Danach machst du einen Doppelklick auf die Manifest.MF und stellst alles so ein wie auf den Screenshots angegeben (im ersten Build auf 'add' klicken wo der Cursor steht und dein jar auswählen).
 

Anhänge

  • Bildschirmfoto.jpg
    Bildschirmfoto.jpg
    53,4 KB · Aufrufe: 29
  • Bildschirmfoto-1.jpg
    Bildschirmfoto-1.jpg
    76 KB · Aufrufe: 33

noisebreath

Bekanntes Mitglied
danke wildcard,
das hab ich schon mal versucht, aber es ging nicht,denke ich werde es nochmal versuchen. ich hab da vielleicht einfach was falsch gemacht.
werden die classpathinformationen des projects auch behalten wenn ich das projekt zu nem jar mache? (also die pfade zu den vom Projekt eingebundenen jars)

nochmals vielen lieben dank für die muehe :)

lg
 

noisebreath

Bekanntes Mitglied
mir ist übrigens etwas sehr merkwürdiges aufgefallen. wenn ich innerhalb meines plugins ein package mache und darin eine class mit eigener main function, dann erkennt er alle objecte (zb EntropyConceptExtraction a = new EntropyConceptExtraction(); ) und terminiert nicht.
Is doch irgendwie komisch dass er innerhalb des gleichen Projekts in ner eigenen main die objekte erkennt aber in den plugin handlern nicht. ist sowas intuitiv?! ^^
 
M

maki

Gast
Is doch irgendwie komisch dass er innerhalb des gleichen Projekts in ner eigenen main die objekte erkennt aber in den plugin handlern nicht. ist sowas intuitiv?! ^^
Werden denn die "Objekte" (Klassen/Interfaces) bzw. deren packages Exportiert/Importiert?
 
M

maki

Gast
die klassen importier ich aus projekten die ich als required projects angegeben habe
Ich meinte ob sie in der Manifest als exportierte & importierte Packages angegeben sind, OSGi ist da sehr strickt, dadurch wird eine sehr saubere Trennung von Komponeneten(Bundles) erzielt und so unnötige Abhängigkeiten von vornherein vermieden.
 

noisebreath

Bekanntes Mitglied
das scheint nicht der fall zu sein. MANIFEST:MF

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Farazplug Plug-in
Bundle-SymbolicName: OWLExtraction_old;singleton:=true
Bundle-Version: 1.0.0
Bundle-Activator: farazplug.Activator
Require-Bundle: org.eclipse.ui,
org.eclipse.core.runtime
Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: JavaSE-1.6

das ist alles was drinsteht
 
M

maki

Gast
Das Manifest ist DIE wichtigste Datei in OSGi, bei Eclipse RCP kommt noch die plugin.xml dazu.
Hast doch einen Editor mit Superfunktionlität dafür, wenn ich mich recht erinnere kann der die exports & imports auf Knopfdruck berechnen.
 
M

maki

Gast
Wenn du die Manifest öffnest, sollte der Editor schon aufgehen, unten hast du dann verschiedene Tabs (Runtime, Dependencies, etc. pp.), *irgendwo da sollte es sein*

Sorry, hab leider keine OSGi Projekt zur Hand (Müsste erst auzschecken), würde dir auf jedenfall ein Tutorial empfehlen, ich fand dieses damals sehr gut, habe aber keine Eclipse RCP gemacht sondern OSGi auf Basis von Equinox mit Maven2 (Felix Bundle Plugin):
Hello, OSGi, Part 1: Bundles for beginners - JavaWorld
Hello, OSGi, Part 2: Introduction to Spring Dynamic Modules - JavaWorld
Hello, OSGi, Part 3: Take it to the server side - JavaWorld
 

Wildcard

Top Contributor
mir ist übrigens etwas sehr merkwürdiges aufgefallen. wenn ich innerhalb meines plugins ein package mache und darin eine class mit eigener main function, dann erkennt er alle objecte (zb EntropyConceptExtraction a = new EntropyConceptExtraction(); ) und terminiert nicht.
Is doch irgendwie komisch dass er innerhalb des gleichen Projekts in ner eigenen main die objekte erkennt aber in den plugin handlern nicht. ist sowas intuitiv?! ^^

Das ist nicht im mindesten merkwürdig. Du musst dir einfach nur abgewöhnen den BuildPath Konfigurieren zu wollen, damit machst du die Sache nämlich nur unnötig kompliziert und Fehleranfällig.
Wenn du eine reguläre Java Application (mit main) in Eclipse ausführst, verwendet er dafür besagten Buildpath und da ist alles drin. Entwickelst du jedoch ein PlugIn/Bundle, dann werden deine Abhängigkeit über den OSGi Container zur Verfügung gestellt.
Dafür gibt es erstmal 3 Möglichkeiten:
1. Du gibst ein Bundle als required Bundle an und bekommst damit Zugriff auf alle Packages die dieses Bundle (explizit!) exportiert.
2. Du importierst ein package. Der OSGi Container versucht nun ein Bundle zufinden das die geforderten Packages exportiert. Wird kein solches Bundle gefunden, hast du Pech.
3. Du bringst selbst irgendwelche Bibliotheken mit(die du warum auch immer nicht zu Bundles machen willst). Diese Bibliotheken müssen innerhalb deines Bundles liegen (in der Regel als jar) und im Manifest als extra classpath entries angegeben sein.

Also: vergiss den blöden Buildpath, bei PlugIn Projekten baut dir Eclipse deinen Classpath anhand des Manifests automatisch zusammen.
 

noisebreath

Bekanntes Mitglied
danke fürdie antwort die endlich mal einiges was ih so fetzenweise hier und da gelesen habe in einklang bringt. verstehe jetzt glaub ich ein bisschen mehr die unterschiede, aber punkt 3 ist mir noch nicht ganz klar.
meinst du damit dass die jars einzelnd entpackt werden sollen und dann aus jedem einzelne Plugins (bundle) gemacht werden sollen, welche ich dann benutze und auf die ich dann mit meinem plugin zugreife?
 

Wildcard

Top Contributor
Von der Philosophie her bietet es sich an aus absolut jedem jar (sei es extern, oder intern) ein OSGi Bundle zu machen. Dadurch sind deine Dependcies sauberer, du kannst bestimmte Versionen Referenzieren,...
Der Unterschied zwischen normalem Jar und einem OSGi Bundle ist erstmal nur ein erweitertes Manifest, demzufolge lassen sich jars sehr leicht konvertieren.
Viele wichtige Bibliotheken sind bereits OSGifiziert und in Zentralen Repositories vorhanden.
Beispiele dafür sind Orbit und das Spring Repository:
Orbit
SpringSource Enterprise Bundle Repository

Wenn du einer jar jedoch kein erweitertes Manifest verpassen willst, oder kannst, hast du die Möglichkeit es Bundle Intern zu verwenden.
Kopier das jar in dein PlugIn Project (zB in /lib) und referenzier es als extra classpath entry im Manifest deines Bundles (siehe Bilder weiter oben).
 

noisebreath

Bekanntes Mitglied
danke wildcard für die geduld und die tollen erklärungen. es funktioniert endlich alles wie es soll! 81 jars sind eingebunden und funktionieren allesamt miteinander. im endeffekt war es ja dann doch recht "einfach" wenn man mal von der klassischen java project heransgehensweise abstand nimmt :)
ich bedanke mich auf diesem wege herzlich bei dir!

lg noise
 

Wildcard

Top Contributor
im endeffekt war es ja dann doch recht "einfach" wenn man mal von der klassischen java project heransgehensweise abstand nimmt :)
Korrekt. Die Sache ist wirklich sehr einfach wenn man sich mal drauf eingelassen hat. Und erst im Anschluss merkt man dann wie mächtig das Konzept wirklich ist.
ich bedanke mich auf diesem wege herzlich bei dir!
keine Ursache, schön das es jetzt tut
 

faetzminator

Gesperrter Benutzer
Ich hatte dieses Problem nun ebenfalls (benötige 3 jars), konnte in den Logs die CNFE sehen.
Nun habe ich alle 3 Jars zu den Buildpaths manuell hinzugefügt. Wenn ich nun im Menu den Wizard starten will, gibt es nicht mal mehr einen Logentry. Es passiert einfach nichts. Ebenfalls ist - seit ich den Buildpath manuell setze - das Icon im Menu und in der Toolbar weg.

Wer kann mir da helfen?

plugin.xml:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.2"?>
<plugin>
   <extension
         point="org.eclipse.ui.actionSets">
      <actionSet
            id="JarVersionCheckerPlugin.actionSet"
            label="Infrastructure"
            visible="true">
         <menu
               id="InfrastructureMenu"
               label="&amp;Infrastructure">
            <separator name="sampleGroup"/>
         </menu>
         <action
               class="com.*.payments.infrastructure.plugin.jarversionchecker.actions.VersionCheckerAction"
               icon="icons/infrastructure.gif"
               id="com.*.payments.infrastructure.plugin.jarversionchecker.actions.SampleAction"
               label="&amp;Version Checker"
               menubarPath="InfrastructureMenu/InfrastructureGroup"
               toolbarPath="InfrastructureGroup"
               tooltip="Version Checker"/>
      </actionSet>
   </extension>

</plugin>

build.properties:
Code:
source.. = src/
output.. = bin/
bin.includes = META-INF/,\
               .,\
               plugin.xml,\
               lib/commons-io-1.3.1.jar,\
               lib/commons-lang-2.4.jar,\
               lib/payments.jar,\
               icons/,\
               bin/
jars.compile.order = .,\
                     lib/payments.jar,\
                     lib/commons-lang-2.4.jar,\
                     lib/commons-io-1.3.1.jar
source.lib/commons-io-1.3.1.jar = lib/
source.lib/commons-lang-2.4.jar = lib/
source.lib/payments.jar = lib/
src.includes = META-INF/,\
               bin/,\
               lib/commons-io-1.3.1.jar,\
               lib/commons-lang-2.4.jar,\
               lib/payments.jar,\
               icons/,\
               src/,\
               plugin.xml

MANIFEST.MF:
Code:
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: JarVersionChecker Plug-in
Bundle-SymbolicName: JarVersionChecker;singleton:=true
Bundle-Version: 1.0.0
Bundle-Vendor: *@*.com
Bundle-Localization: plugin
Require-Bundle: org.eclipse.ui,
 org.eclipse.core.resources,
 org.eclipse.core.runtime
Bundle-ClassPath: lib/commons-io-1.3.1.jar,
 lib/commons-lang-2.4.jar,
 lib/payments.jar,
 .
Export-Package: com.*.payments.infrastructure.jar,
 com.*.payments.infrastructure.utilities,
 org.apache.commons.io,
 org.apache.commons.io.filefilter,
 org.apache.commons.io.input,
 org.apache.commons.io.output,
 org.apache.commons.lang,
 org.apache.commons.lang.builder,
 org.apache.commons.lang.enum,
 org.apache.commons.lang.enums,
 org.apache.commons.lang.exception,
 org.apache.commons.lang.math,
 org.apache.commons.lang.mutable,
 org.apache.commons.lang.text,
 org.apache.commons.lang.time
 

faetzminator

Gesperrter Benutzer
Konnte das Problem beheben - hatte noch eine alte Version im plugins/ Ordner. Bis anhin machte das allerdings keine Probleme beim Ausführen der Test-Eclipse-Umgebung - die Testapp sollte von Eclipse vor dem anderen gelesen werden?
 

faetzminator

Gesperrter Benutzer
Nun, das erstellte Plugin verursachte Probleme in einer Eclipse-Testumgebung (Run as Eclipse Application). Der Grund dafür war anscheinend, dass ich eine ältere Version dieses Plugins "produktiv auf Eclipse laufen liess" - d.h. in ~/plugins/ hatte. Diese werden in der Testumgebung anscheinend ebenfalls geladen. So gab es gewisse Inkompatibilitäten.
 

Wildcard

Top Contributor
In deiner run configuration steht genau welche Bundles geladen werden und welche nicht. Auch aufgeteilt nach Workspace Bundles und installierten Bundles.
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben