2017-02-20 1 views
0

Ich versuche, Eclipse-Plugin zu schreiben. Ich muss eine JAR-Datei in meinem Code verwenden. innerhalb derHinzufügen von Glas zu Eclipse-Plugin

public class SampleHandler extends AbstractHandler { 
    @Override 
    public Object execute(ExecutionEvent event) throws ExecutionException { 

die JAR-Datei Prozess P = Runtime.getRuntime() unter Verwendung von direkt zugegriffen exec (checkStyle_cmd.); checkDtyle_cmd ist String "java -jar" + "Speicherort der jar-Datei" + (einige andere Sachen).

Ich habe einen Ordner 'lib' erstellt. Benutzte es als Quellordner. Steckte das Glas dort. Hinzugefügt "/ProjectName/lib/jar_file_name.jar" zu Classpath in Runtime. Funktioniert nicht. Also, auch hinzugefügt /Test5/lib/checkstyle-7.1.2-all.jar in bin.includes build.properties. Immer noch kein Glück. Ich kann nicht auf JAR-Dateifehler zugreifen

+0

Wenn Sie versuchen, das Glas in einem separaten Prozess ausgeführt es muss nicht in dem Strom sein Klassenpfad - Sie müssen nur den ** absoluten ** Dateipfad an den java-Befehl übergeben, aber Sie müssen auch 'exec' genau sagen, wo nach dem java-Befehl gesucht werden soll. Genau welchen Fehler bekommst du? –

+0

Ich bekomme den Fehler "Unamble to jarfile /Test5/lib/checkstyle-7.1.2-all.jar zugreifen". Es funktioniert mit absolutem Pfad. Aber ich muss mein Projekt als JAR-Plugin exportieren, damit andere Leute es verwenden können. Also muss ich einen relativen Pfad angeben. –

Antwort

0

Sie können den absoluten Pfad des Glases in Ihrem bekommen Plug-in mit so etwas wie:

Bundle bundle = FrameworkUtil.getBundle(getClass()); 

URL url = FileLocator.find(bundle, new Path("/lib/jar_file_name.jar"), null); 

url = FileLocator.toFileURL(url); 

String path = URIUtil.toFile(URIUtil.toURI(fileURL)).getAbsolutePath(); 
+0

nicht an. Was ist Bundle und FrameworkUtil? Ich bekomme keine Vorschläge von Eclipse, diese Klassen zu importieren. –

+0

Sie sind im 'org.eclipse.osgi'-Plug-in, also fügen Sie das zu den Abhängigkeiten Ihres Plugins hinzu. –

0

Es könnte besser sein, den Code tatsächlich aus dem Jar zu extrahieren, als ihn über die Befehlszeile auszuführen.

Innerhalb eines .jar-Ordners befinden sich die .class-Dateien des Byte-Codes, die aus .java-Dateien kompiliert und von der VM ausgeführt werden.

Sie können this Website verwenden, um .class-Dateien zu dekompilieren.

Wenn Sie den Code von der Befehlszeile aus ausführen, wie andere gesagt haben, dass Sie den absoluten Pfad kennen müssen und der relative Pfad manchmal nicht existiert, wäre es einfach besser, den gesamten Quellcode in einem zu kompilieren .jar eher zwei .jar's.

+0

Ich habe versucht, den Pfad der JAR-Datei mithilfe von SampleHandler.class.getClassLoader() zu erhalten. GetResource ("Dateiname"); Es hat nicht funktioniert. Ich habe es mit einer Textdatei versucht. Ich bekomme nur ausgegeben, wenn die Datei im Ordner src ist. Wenn es im lib-Ordner ist (den ich in den Quellordner gepackt habe), zeigt es den Pfad –