2014-02-09 63 views
1

我嘗試編寫一個eclipse插件,該插件刪除特殊文件夾中的所有文件。我從「Hello,World Command」項目開始並對其進行了修改。FileUtils在eclipse插件項目中拋出錯誤

package plugin.first.handlers; 

import java.io.File; 
import java.io.IOException; 

import org.eclipse.core.commands.AbstractHandler; 
import org.eclipse.core.commands.ExecutionEvent; 
import org.eclipse.core.commands.ExecutionException; 
import org.eclipse.ui.IWorkbenchWindow; 
import org.eclipse.ui.handlers.HandlerUtil; 
import org.eclipse.jface.dialogs.MessageDialog; 
import org.apache.commons.io.FileUtils; 

/** 
* Our sample handler extends AbstractHandler, an IHandler base class. 
* @see org.eclipse.core.commands.IHandler 
* @see org.eclipse.core.commands.AbstractHandler 
*/ 
public class SampleHandler extends AbstractHandler { 
    /** 
    * The constructor. 
    */ 
    public SampleHandler() { 
    } 

    /** 
    * the command has been executed, so extract extract the needed information 
    * from the application context. 
    */ 
    public Object execute(ExecutionEvent event) throws ExecutionException { 
     IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event); 
     String myString = "hello world"; 
     try { 
      FileUtils.cleanDirectory(new File("C:\\Temp\\_2")); 
      myString = "cleanDirectory worked!"; 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      myString = "cleanDirectory failed!"; 
      e.printStackTrace(); 
     } 
     MessageDialog.openInformation(
       window.getShell(), 
       "First", 
       myString); 
     return null; 
    } 
} 

但是,當執行該項目時,我得到以下錯誤。

!SESSION 2014-02-09 13:40:17.637 ----------------------------------------------- 
eclipse.buildId=4.3.0.M20130911-1000 
java.version=1.6.0_45 
java.vendor=Sun Microsystems Inc. 
BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=de_CH 
Framework arguments: -product org.eclipse.platform.ide 
Command-line arguments: -product org.eclipse.platform.ide -data F:\Users\Christoph\workspace/../runtime-EclipseApplication -dev file:F:/Users/Christoph/workspace/.metadata/.plugins/org.eclipse.pde.core/Eclipse Application/dev.properties -os win32 -ws win32 -arch x86_64 -consoleLog 

!ENTRY org.eclipse.ui 4 0 2014-02-09 13:40:27.388 
!MESSAGE Unhandled event loop exception 
!STACK 0 
org.eclipse.e4.core.di.InjectionException: java.lang.NoClassDefFoundError: org/apache/commons/io/FileUtils 
    at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:63) 
    at org.eclipse.e4.core.internal.di.InjectorImpl.invokeUsingClass(InjectorImpl.java:243) 
    at org.eclipse.e4.core.internal.di.InjectorImpl.invoke(InjectorImpl.java:224) 
    at org.eclipse.e4.core.contexts.ContextInjectionFactory.invoke(ContextInjectionFactory.java:132) 
    at org.eclipse.e4.core.commands.internal.HandlerServiceHandler.execute(HandlerServiceHandler.java:167) 
    at org.eclipse.core.commands.Command.executeWithChecks(Command.java:499) 
    at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508) 
    at org.eclipse.e4.core.commands.internal.HandlerServiceImpl.executeHandler(HandlerServiceImpl.java:213) 
    at org.eclipse.e4.ui.workbench.renderers.swt.HandledContributionItem.executeItem(HandledContributionItem.java:850) 
    at org.eclipse.e4.ui.workbench.renderers.swt.HandledContributionItem.handleWidgetSelection(HandledContributionItem.java:743) 
    at org.eclipse.e4.ui.workbench.renderers.swt.HandledContributionItem.access$7(HandledContributionItem.java:727) 
    at org.eclipse.e4.ui.workbench.renderers.swt.HandledContributionItem$4.handleEvent(HandledContributionItem.java:662) 
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) 
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1057) 
    at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4170) 
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3759) 
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1113) 
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) 
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:997) 
    at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:138) 
    at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:610) 
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) 
    at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:567) 
    at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) 
    at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:124) 
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) 
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) 
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) 
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:354) 
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:181) 
    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:636) 
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:591) 
    at org.eclipse.equinox.launcher.Main.run(Main.java:1450) 
    at org.eclipse.equinox.launcher.Main.main(Main.java:1426) 
Caused by: java.lang.NoClassDefFoundError: org/apache/commons/io/FileUtils 
    at plugin.first.handlers.SampleHandler.execute(SampleHandler.java:34) 
    at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:290) 
    at org.eclipse.ui.internal.handlers.E4HandlerProxy.execute(E4HandlerProxy.java:90) 
    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.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:56) 
    ... 37 more 
Caused by: java.lang.ClassNotFoundException: org.apache.commons.io.FileUtils cannot be found by plugin.first_1.0.0.qualifier 
    at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:501) 
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421) 
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412) 
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    ... 45 more 

!ENTRY org.eclipse.egit.ui 2 0 2014-02-09 13:40:31.283 
!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git 
user global configuration and to define the default location to store repositories: 'C:\Users\Christoph'. If this is 
not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and 
EGit might behave differently since they see different configuration options. 
This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. 

我已經添加了commons-io-2.4.jar到項目中,也加入此文件路徑的build.properties。所以我不明白爲什麼拋出異常。

build.properties

source.. = src/ 
output.. = bin/ 
bin.includes = plugin.xml,\ 
       META-INF/,\ 
       .,\ 
       lib/commons-io-2.4.jar,\ 
       icons/ 

請告訴我這個項目中的問題?

回答

1

我已經找到解決我的問題的方法。

您不需要將包的路徑添加到build.properties。只需執行接受的問題所提供的步驟:Adding jars to a Eclipse PlugIn

相關問題