28 marca 2008

AJDT - AspectJ w Eclipse za Łukaszem

Łukasz Lipka przybrał szaty blogera serią artykułów o AspectJ z pomocą wtyczki do Eclipse - AJDT: AspectJ Development Tools - ApectJ wprowadzenie oraz wcześniej AOP wstęp.

Sprawdziłem własnoręcznie jak AJDT będzie sprawował się z moją wersją Eclipse 3.4M5 (a przyznam, że nie spowdziewałem się, że będzie lekko i wręcz oczekiwałem niespodzianek). Kiedyś już instalowałem wtyczkę AJDT, ale było to tak dawno, że nawet wyłączyłem ją w wersji 3.4M5.
Zacząłem od aktualizacji wtyczki. Poszła gładko, ale uruchomienie już nie. Utworzenie projektu AspectJ zakończyło się komunikatem błędu z NCDFE (!)

, gdzie w .log znalazłem następujący wyjątek NCDFE:
 !ENTRY org.eclipse.ui 4 0 2008-03-27 15:29:50.656
!MESSAGE Unhandled event loop exception
!STACK 0
java.lang.NoClassDefFoundError: org/eclipse/jdt/internal/ui/wizards/JavaProjectWizardFirstPage
at org.eclipse.ajdt.internal.ui.wizards.AspectJProjectWizard.addPages(AspectJProjectWizard.java:66)
at org.eclipse.jface.wizard.WizardSelectionPage.getNextPage(WizardSelectionPage.java:113)
at org.eclipse.ui.internal.dialogs.WorkbenchWizardSelectionPage.getNextPage(WorkbenchWizardSelectionPage.java:100)
at org.eclipse.jface.wizard.WizardDialog.nextPressed(WizardDialog.java:813)
at org.eclipse.jface.wizard.WizardDialog.buttonPressed(WizardDialog.java:369)
at org.eclipse.jface.dialogs.Dialog$2.widgetSelected(Dialog.java:623)
at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:227)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:982)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3760)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3371)
at org.eclipse.jface.window.Window.runEventLoop(Window.java:825)
at org.eclipse.jface.window.Window.open(Window.java:801)
at org.eclipse.ui.internal.handlers.WizardHandler$New.executeHandler(WizardHandler.java:260)
at org.eclipse.ui.internal.handlers.WizardHandler.execute(WizardHandler.java:280)
at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:252)
at org.eclipse.core.commands.Command.executeWithChecks(Command.java:475)
at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:470)
at org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:165)
at org.eclipse.ui.internal.keys.WorkbenchKeyboard.executeCommand(WorkbenchKeyboard.java:470)
at org.eclipse.ui.internal.keys.WorkbenchKeyboard.press(WorkbenchKeyboard.java:821)
at org.eclipse.ui.internal.keys.WorkbenchKeyboard.processKeyEvent(WorkbenchKeyboard.java:879)
at org.eclipse.ui.internal.keys.WorkbenchKeyboard.filterKeySequenceBindings(WorkbenchKeyboard.java:568)
at org.eclipse.ui.internal.keys.WorkbenchKeyboard.access$3(WorkbenchKeyboard.java:510)
at org.eclipse.ui.internal.keys.WorkbenchKeyboard$KeyDownFilter.handleEvent(WorkbenchKeyboard.java:126)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Display.filterEvent(Display.java:1160)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:981)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1006)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:991)
at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1019)
at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1015)
at org.eclipse.swt.widgets.Widget.wmChar(Widget.java:1331)
at org.eclipse.swt.widgets.Control.WM_CHAR(Control.java:3883)
at org.eclipse.swt.widgets.Tree.WM_CHAR(Tree.java:5637)
at org.eclipse.swt.widgets.Control.windowProc(Control.java:3776)
at org.eclipse.swt.widgets.Tree.windowProc(Tree.java:5633)
at org.eclipse.swt.widgets.Display.windowProc(Display.java:4473)
at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method)
at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:2333)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3369)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2392)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2356)
at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2222)
at org.eclipse.ui.internal.Workbench$4.run(Workbench.java:474)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:288)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:469)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:106)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:193)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:106)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:76)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:362)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:175)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:564)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:504)
at org.eclipse.equinox.launcher.Main.run(Main.java:1251)
at org.eclipse.equinox.launcher.Main.main(Main.java:1227)
Zmieniłem stronę z aktualizacjami wtyczki na zalecaną na stronie AJDT - http://download.eclipse.org/tools/ajdt/33/dev/update, co wcale nie rozwiązało problemu.

Wtyczka nie może zostać pobrana, a co dopiero mówić o jej uruchomieniu.

Pobrałem więc wersję rozwojową ajdt_1.5.2.200803241209_archive.zip ze strony Development builds i znowu NCDFE. Czyżby koniec mojego poznawania AspectJ z Eclipse 3.4M5?

Niezmęczony początkowymi trudnościami pozostało pogooglować (ajdt eclipse 3.4m5) i mam - [ajdt-dev] AJDT available for Eclipse 3.4, gdzie znalazłem informację, której potrzebowałem. Wystarczy zmienić adres z aktualizacjami dla wersji Eclipse 3.4M5 na http://download.eclipse.org/tools/ajdt/34/dev/update. Kiedy porównuję adresy - w pierwszym, gdzie miałem błąd jest 33/dev/update, podczas gdy w tym nowym jest już 34/dev/update.

Po instalacji, restarcie Eclipse, Ctrl+N i wybieram nowy projekt typu AspectJ Project. Wstrzymanie oddechu i...

Jest! Mogę kontynuować naukę AJDT jak opisał to Łukasz. Wszystko działa teraz bez zarzutu. Zapisałem się nawet na grupę AJDT, tak mnie te trudności zaintrygowały.

Czekam z niecierpliwością na kolejne wpisy Łukasza o AspectJ i AJDT.