[Java + Eclipse]

pyroben

Ensign
Registriert
Aug. 2004
Beiträge
142
Hallo,

Gibt es ne Möglichkeit programmiertechnisch abzufragen ob ein Plugin das "optional" ist, installiert wurde? Und wenn ja, Daten davon auslesen?

Bsp:
PluginA kann bestimmte Regeln erstellen und bearbeiten.
PluginB hat unter anderem einen Satz Regeln gespeichert.

ist B nun nicht installiert, soll man ganz normal seine Regeln erstellen können
ist B aber installiert, soll man die dort gespeicherten Regeln verwenden können.


Ich habe bereits mal 2 Plugins gebaut, "Email" soll von "hello" einfach den BooleanWert "doesExist=true" abfragen

Plugin EMAIL:

package email;

import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.ui.IWorkbenchWindow;
import hello.actions.SampleAction;


public class MessagePopupAction extends Action {

private final IWorkbenchWindow window;
public String info = "iniString";
MessagePopupAction(String text, IWorkbenchWindow window) {
super(text);
this.window = window;
// The id is used to refer to the action in a menu or toolbar
setId(ICommandIds.CMD_OPEN_MESSAGE);
// Associate the action with a pre-defined command, to allow key bindings.
setActionDefinitionId(ICommandIds.CMD_OPEN_MESSAGE);
setImageDescriptor(email.Activator.getImageDescriptor("/icons/sample3.gif"));

if (SampleAction.isDoesExist()) {
info = "Plugin da!";
} else {
info = "kein Plugin";
}

}

public void run() {
// check if Plug-in is installed
MessageDialog.openInformation(window.getShell(), "Status", info);

}
}

Manifest von Email:
Manifest-Version: 1.0
Eclipse-BuddyPolicy: registered
Bundle-ManifestVersion: 2
Bundle-Name: Email Plug-in
Bundle-SymbolicName: Email;singleton:=true
Bundle-Version: 1.0.0
Bundle-Activator: email.Activator
Require-Bundle: org.eclipse.ui,
org.eclipse.core.runtime
Eclipse-LazyStart: true
Import-Package: hello.actions;resolution:=optional

Plugin hello:
package hello.actions;

import org.eclipse.jface.action.IAction;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.IWorkbenchWindowActionDelegate;
import org.eclipse.jface.dialogs.MessageDialog;

public class SampleAction implements IWorkbenchWindowActionDelegate {
private IWorkbenchWindow window;
public static boolean doesExist = true;

/**
* The constructor.
*/
public SampleAction() {
}

public void run(IAction action) {
}

public void selectionChanged(IAction action, ISelection selection) {
}

public void dispose() {
}

public void init(IWorkbenchWindow window) {
this.window = window;
}

public static boolean isDoesExist() {
return doesExist;
}
}


Manifest hello:
Manifest-Version: 1.0
Eclipse-RegisterBuddy: Email
Bundle-ManifestVersion: 2
Bundle-Name: Hello Plug-in
Bundle-SymbolicName: hello; singleton:=true
Bundle-Version: 1.0.0
Bundle-Activator: hello.Activator
Require-Bundle: org.eclipse.ui,
org.eclipse.core.runtime
Eclipse-LazyStart: true
Export-Package: hello.actions, hello



Eclipse zeigt mir keine Fehler an, bis zur Compilierung...
Exception in thread "Thread-3" java.lang.NoClassDefFoundError: hello.actions.SampleAction
at email.MessagePopupAction.<init>(MessagePopupAction.java:23)
at email.ApplicationActionBarAdvisor.makeActions(ApplicationActionBarAdvisor.java:60)
at org.eclipse.ui.application.ActionBarAdvisor.fillActionBars(ActionBarAdvisor.java:147)
at org.eclipse.ui.internal.WorkbenchWindow.fillActionBars(WorkbenchWindow.java:3294)
at org.eclipse.ui.internal.WorkbenchWindow.<init>(WorkbenchWindow.java:380)
 
Zuletzt bearbeitet:
Warum definierst Du nicht einfach im einen Plugin einen Extension Point, den das andere Plugin dann extendet? Das wäre die sauberste Lösung und genau für solche Problemstellungen sind Extension Points schließlich da.
Dein Ansatz kann nicht funktionieren, schon allein deswegen, da du immer einen Laufzeitfehler bekommen wirst, wenn das zweite Plugin nicht läuft.
 
jo gerade wenn der Laufzeitfehler kommt, kann ich den ja abfangen und weis somit, dass mein optionales Plugin nicht da ist. Kommt der Fehler nicht, so ist es da und kann verwendet werden. Aber ich versuch es mal mit deiner Lösung.

Danke
 
Zurück
Oben