Vaadin Eclipse Plugin i projekt oparty o Maven – kompilacja motywu

Od pewnego czasu mam do czynienia z Vaadin Framework ( w kombinacji Vaadin/WildFly/Maven/Eclipse). Integracja przebiegała doskonale z wyjątkiem pewnego drobiazgu – próba kompilacji motywu kończyła się błędem „Select a theme file (.scss) or a Vaadin project to compile.”. W zasadzie nie przeszkadzałoby mi to specjalnie bo w trybie deweloperskiem Vaadin potrafi kompilować pliki SCSS w locie gdyby nie ogromne opóźnienia (rzędu 10s-100s) przy uruchomieniu serwera w trybie Debug (opisane tutaj). Obejściem jest oczywiście ręczna kompilacja SCSS – tyle że ta kończyła się komunikatem „Select a theme file (.scss) or a Vaadin project to compile.”. W swoim czasie zignorowałem ten problem; dodałem do pliku POM nową zależność

    <dependency>
        <groupId>com.vaadin</groupId>
        <artifactId>vaadin-themes</artifactId>
        <version>${vaadin.version}</version>
    </dependency>

i w razie potrzeby kompilowałem motyw z linii poleceń

mvn vaadin:compile-theme

W końcu ciekawość wzięła górę i postanowiłem udać się do źródeł (przypadkowa gra słów)… i pojawił się problem. Gdzie one są? Większość projektów Vaadin jest na GH oraz na witrynie dev.vaadin.com/git/ – ale pluginu dla Eclipse tam nie ma. W końcu udało mi się je znaleźć na http://dev.vaadin.com/svn/integration/eclipse/ – ale nie było to bynajmniej pierwsze miejsce w którym szukałem. Tutaj mała dygresja – plugin nie działa w pełni w Eclipse 4.4 (Luna) ze względu na wykorzystanie klasy org.eclipse.mylyn.internal.provisional.commons.ui.AbstractNotificationPopup która w nowej wersji Mylyna zmieniła nazwę na org.eclipse.mylyn.commons.ui.dialogs.AbstractNotificationPopup

Kod odpowiadający za kompilację motywu znajduje się w klasie com.vaadin.integration.eclipse.handlers.CompileThemeHandler a problem tkwił w metodzie compileFile gdzie znajduje się sprawdzenie, czy projekt ma naturę Vaadin

    // com.vaadin.integration.eclipse.VaadinFacetUtils.isVaadinProject(IProject)
    /**
     * Check whether a project has the Vaadin project nature.
     * 
     * @param project
     * @return true if the project is an Vaadin project
     */
    public static boolean isVaadinProject(IProject project) {
        if (project == null) {
            return false;
        }

        try {
            IFacetedProject fproj = ProjectFacetsManager.create(project);
            return fproj != null &amp;&amp; fproj.hasProjectFacet(VAADIN_FACET);
        } catch (CoreException e) {
            ErrorUtil.handleBackgroundException(e);
            return false;
        }
    }

Okazało się, że wystarczy dodać facet Vaadin Plug-in for Eclipse 7.0 w konfiguracji projektu i kompilacja zaczęła działać. Jest to oczywiście rozwiązanie chwilowe – katalog .settings jest wyłączony z kontroli SCM – więc przy następnym pobraniu projektu z repozytorium trzeba będzie to potwórzyć :-< .

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Log Out / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Log Out / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Log Out / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Log Out / Zmień )

Connecting to %s