# ECLIPSE RCP - mehrere plugins - eine resource?



## lumo (1. Apr 2010)

hallo

gibts ne möglichkeit, dass ich alle meine resources in eine file/jar lege,
anstatt in jeder jar ein paar resources zu haben? das würde mir den überblick und das ersetzten von graphiken schon etwas erleichtern...

derzeit legt jedes plugin seine graphiken im selben ordner ab, in seiner jar...

oder müsste ich dazu ein eigenes resource plugin jar machen??


----------



## Wildcard (1. Apr 2010)

Es ist üblich das alle Bundles ihre Resourcen selbst enthalten. Wenn du magst kannst du ein Bundle mit shared resources erstellen, allerdings brauchst du dann trotzdem noch ein paar Icons pro Bundle wenn du zB Images in der plugin.xml eintragen möchtest.


----------



## lumo (2. Apr 2010)

hallo wildcard!

hab jetzt alle resources in ein eigenes plugin gepackt.
das einzige icon, das ich nicht auslagern kann, ist das der perspective, denn das kann ich nicht mit code setzen, sondern nur per xml file (wurde als bug gemeldet, und ist als helpwanted markiert - die entwickler werden es selbst nicht fixen - steht so im bugreport...)

die icons vom product selbst, also die fürs branding können nat. liegen wo sie wollen.
hauptsache die resources, die im ganzen programm verwendet werden liegen alle an einem ort, somit wirds einfacher bilder zu tauschen und verhindert, dass ein bild mal wo anderst nen anderen look hat, nur weil ich vergessen hab es dort auszutauschen...

wie?
ich hab ein plugin mit einer singleton, die die bilder lädt.
beim request wird in einer hashmap der name der datei, und die daten selbst gehasht.
wird ein bild angefragt das schon einmal geladen wurde, gibts die instanz, sonst wirds geladen.

ich denke dass das halbwegs effizient ist 

greets
lumo


----------



## Wildcard (2. Apr 2010)

Solange du images im Code verwendest kann man es so machen.
Für Bilder die im Code verwendet werden mache ich es normalerweise so:
Im Bundle das die Bilder enthält erstelle ich ein Interface ISharedImages.
ISharedImages sieht in etwa so aus (Activator erbt von AbstractUIPlugin):


```
ImageDescriptor DESCRIPTOR_SOME_IMAGE = Activator.imageDescriptorFromPlugin("your.bundle.id","your/path");
Image SOME_IMAGE = DESCRIPTOR_SOME_IMAGE.create();
```

Andere Bundles können dann ganz einfach auf die Images zugreifen, je nachdem ob sie einen Descriptor, oder ein Image brauchen:

```
ImageDescriptor des = ISharedImages.DESCRIPTOR_SOME_IMAGE;
Image image = ISharedImages.SOME_IMAGE
```


----------

