2015-11-15 153 views
2

目前我傳遞命令行參數來調用程序。我正在展示一個小的代碼片段供您參考。Eclipse插件:傳遞命令行參數

public class Main { 
    public static void main(String[] args) throws Exception { 

     GlobalVariable.activity = args[0]; 
     GlobalVariable.templatePath = args[1]; 
     .... 

     } 

要調用上述程序,我從Eclipse傳入以下命令。 enter image description here

現在,我正在嘗試開發一個從Java程序本身調用此命令的eclipse插件。要開發一個插件,我也做了以下內容:

  1. 的Eclipse(新建 - >項目 - > Eclipse插件項目),項目名稱爲「org.example.helloworld
  2. 我選擇「插件與彈出向上菜單「模板。
  3. 現在,我寫了下面的代碼在「NewAction.java」命令行參數傳遞給我的主文件,如上圖所示」
public void run(IAction action) { 
     String args[] = new String[2]; 
     args[0] = "compile-vocab-spec"; 
     args[1] = "C:\\Template\\"; 

     try { 
      Main.main(args); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

我的問題是 - 我無法調用Main.java文件,這種技術有什麼問題?請歡迎任何其他選擇。請讓我知道以防萬一您需要更多信息以進一步清晰化

我看到以下消息控制檯我運行代碼。

!SESSION 2015-11-15 14:04:18.580 ----------------------------------------------- 
eclipse.buildId=4.5.1.M20150904-0015 
java.version=1.8.0_51 
java.vendor=Oracle Corporation 
BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_US 
Framework arguments: -product org.eclipse.platform.ide 
Command-line arguments: -product org.eclipse.platform.ide -data C:\Users\inpapat4\workspace/../runtime-EclipseApplication -dev file:C:/Users/inpapat4/workspace/.metadata/.plugins/org.eclipse.pde.core/Eclipse Application/dev.properties -os win32 -ws win32 -arch x86_64 -consoleLog 

!ENTRY org.eclipse.core.net 4 0 2015-11-15 14:04:36.102 
!MESSAGE WinHttp.GetProxyForUrl for pac failed with error 'The proxy auto-configuration script could not be downloaded 
' #12167. 

!ENTRY org.eclipse.ui 4 0 2015-11-15 14:04:46.332 
!MESSAGE Unhandled event loop exception 
!STACK 0 
java.lang.NoClassDefFoundError: org/antlr/runtime/CharStream 
    at org.example.helloworld.popup.actions.NewAction.run(NewAction.java:42) 
    at org.eclipse.ui.internal.PluginAction.runWithEvent(PluginAction.java:247) 
    at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:595) 
    at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:511) 
    at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:420) 
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) 
    at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4362) 
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1113) 
    at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4180) 
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3769) 
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$4.run(PartRenderingEngine.java:1127) 
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:337) 
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1018) 
    at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:156) 
    at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:654) 
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:337) 
    at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:598) 
    at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) 
    at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:139) 
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) 
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134) 
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104) 
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:380) 
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:235) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:669) 
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:608) 
    at org.eclipse.equinox.launcher.Main.run(Main.java:1515) 
    at org.eclipse.equinox.launcher.Main.main(Main.java:1488) 
Caused by: java.lang.ClassNotFoundException: org.antlr.runtime.CharStream cannot be found by org.example.helloworld_1.0.0.qualifier 
    at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:439) 
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:352) 
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:344) 
    at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:160) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    ... 32 more 

MANIFEST.MF文件的內容如下:

Bundle-ManifestVersion: 2 
Bundle-Name: Helloworld 
Bundle-SymbolicName: org.example.helloworld;singleton:=true 
Bundle-Version: 1.0.0.qualifier 
Bundle-Activator: org.example.helloworld.Activator 
Require-Bundle: org.eclipse.ui, 
org.eclipse.core.runtime, 
org.eclipse.core.resources 
Bundle-RequiredExecutionEnvironment: JavaSE-1.8 
Bundle-ActivationPolicy: lazy 
+2

當你運行上面的代碼時會發生什麼? –

+0

感謝Elliott Frisch的評論。要回答你的問題,我正在用我在控制檯上看到的消息更新問題。 – Pankesh

+1

那到底是什麼問題?代碼是否編譯?運行時你會遇到異常嗎? –

回答

1

在你的插件所需的罐子必須在MANIFEST.MF在Bundle-Classpath進入上市。

要做到這一點,打開MANIFEST.MF編輯器,在'運行時'選項卡上添加jar到'Classpath'部分。

結果可能會是這樣的:

enter image description here

的 ''入口是爲插件文件,然後我有一個'lib'文件夾中有3個罐子。

還要確保jar被列在'build.properties'文件中,以便它們被包含在最終的插件jar中。

+0

非常感謝您解決此問題!現在已經解決了。 :) :) – Pankesh