ClassNotFoundException в модуле Grails gwt - PullRequest
1 голос
/ 08 марта 2012

Я недавно пытался начать использовать Grails, и теперь я хочу интегрировать свою клиентскую часть gwt в проект grails.Я использую плагин Grails GWT и в итоге исправил все ошибки компилятора, кроме этой:

Compiling module com.CalendarMVP
|    Resolving com.client.mvp.AppPlaceHistoryMapper
|       Found type 'com.client.mvp.AppPlaceHistoryMapper'
|          [ERROR] Annotation error: cannot resolve com.client.place.HelloPlace$Tokenizer
| java.lang.ClassNotFoundException: com.client.place.HelloPlace$Tokenizer

И те же повторы для GreetingsPlace $ Tokenizer и UserPlace $ Tokenizer, за исключением того, что я также получаю:

 [ERROR] Annotation error: expected class java.lang.Class, got null

Эти классы являются частью моей реализации шаблона MVP, использующей встроенную платформу ActivityAndPlaces. Код для AppPlaceHistoryMapper такой:

package com.client.mvp;

import com.google.gwt.place.shared.PlaceHistoryMapper;
import com.google.gwt.place.shared.WithTokenizers;

import com.client.place.GoodbyePlace;
import com.client.place.GreetingsPlace;
import com.client.place.HelloPlace;
import com.client.place.ManagerCalendarPlace;
import com.client.place.ManagerPlace;
import com.client.place.UserPlace;

@WithTokenizers( { HelloPlace.Tokenizer.class, GoodbyePlace.Tokenizer.class,
GreetingsPlace.Tokenizer.class, ManagerPlace.Tokenizer.class,
UserPlace.Tokenizer.class, ManagerCalendarPlace.Tokenizer.class
})
public interface AppPlaceHistoryMapper extends PlaceHistoryMapper {
}

А для HelloPlace:

 package com.client.place;

 import com.google.gwt.place.shared.Place;

 import com.google.gwt.place.shared.PlaceTokenizer;


 public class HelloPlace extends Place {
 private String helloName;

public HelloPlace(String token)
{
    this.helloName = token;
}

public String getHelloName()
{
    return helloName;
}

public static class Tokenizer implements PlaceTokenizer<HelloPlace>
{

    @Override
    public String getToken(HelloPlace place)
    {
        return place.getHelloName();
    }

    @Override
    public HelloPlace getPlace(String token)
    {
        return new HelloPlace(token);
    }

}

}

В конце списка ошибок у меня также есть:

 Computing all possible rebind results for 'com.client.mvp.AppPlaceHistoryMapper'
 |          Rebinding com.client.mvp.AppPlaceHistoryMapper
 |             Invoking generator com.google.gwt.place.rebind.PlaceHistoryMapperGenerator
 |                [ERROR] Generator 'com.google.gwt.place.rebind.PlaceHistoryMapperGenerator' threw an exception while rebinding 'com.client.mvp.AppPlaceHistoryMapper'
 | java.lang.NullPointerException

и:

 [WARN] For the following type(s), generated source was never committed (did you forget to call commit()?)
 |          [WARN] com.client.mvp.AppPlaceHistoryMapperImpl
 |    [ERROR] Errors in 'file:/D:/Naukma/Programing/JavaEE/STSworkspace/SocSystemGrails/src/gwt/com/client/CalendarMVP.java'
 |       [ERROR] Line 47:  Failed to resolve 'com.client.mvp.AppPlaceHistoryMapper' via deferred binding

В onModuleLoad () я создаю AppPlaceHistoryMapper таким образом:

 public void onModuleLoad()
{

    ClientFactory clientFactory = GWT.create(ClientFactoryImpl.class);
    EventBus eventBus = clientFactory.getEventBus();
    PlaceController placeController = clientFactory.getPlaceController();

    ActivityMapper activityMapper = new AppActivityMapper(clientFactory);
    ActivityManager activityManager = new ActivityManager(activityMapper, eventBus);
    activityManager.setDisplay(appWidget);

    AppPlaceHistoryMapper historyMapper= GWT.create(AppPlaceHistoryMapper.class);
    PlaceHistoryHandler historyHandler = new PlaceHistoryHandler(historyMapper);
    historyHandler.register(placeController, eventBus, defaultPlace);

    RootPanel.get().add(appWidget);
    // Goes to place represented on URL or default place
    historyHandler.handleCurrentHistory();
}

Я только начал работать с Grails и, возможно, я что-то затуманиваю.Кто-нибудь может мне помочь?

Ответы [ 2 ]

2 голосов
/ 23 августа 2012

Я думаю, что эта ссылка (группы Google) может помочь.

По сути, вам нужно скомпилировать классы, созданные с использованием аннотаций (те, что с Tokenizer, на которые ссылается PlaceHistoryMapper).Как только вы скомпилируете эти классы, вы добавите их в путь к классам для GWTCompiler.

Надеюсь, это поможет

1 голос
/ 10 октября 2014

Если ошибка SDM компилируется: поиск классов точек входа [ОШИБКА] Невозможно найти тип 'com.company.project.client.YourGWTApp' [ОШИБКА] Подсказка: убедитесь, что имя типа 'com.ajna4taiga.recycling.client.RecyclingEntryPoint' действительно Вы имели в виду [ОШИБКА] Подсказка: убедитесь, что ваш путь к классу включает все необходимые исходные корни [ОШИБКА] Компилятор вернул false

добавить конфигурацию запуска classpath для SDM Записи пользователя Продвижение (кнопка) Папка Advance (добавьте src direcotry вашего проекта YourGWTApp) Applay Сохранить настройки запуска

если ошибка ниже, Компиляция модуля com.company.project.YourGWTApp
Разрешение com.ajna4taiga.recycling.client.AppPlaceHistoryMapper Найден тип 'com.company.project.client.AppPlaceHistoryMapper' [ОШИБКА] Ошибка аннотации: не удается разрешить com.company.project.client.places.HomePlace $ HomePlaceTokenizer

Вы должны добавить в свою конфигурацию запуска для своего SDM добавьте свой проект GWT в classpath Записи пользователя кнопка Добавить проект проверить проект YourGWTApp

...