Как правильно связать GWT с моим webapp? (было: почему gwt-user-1.7.0 содержит классы API сервлета)

Кто-нибудь знает разумную причину такого решения? В большинстве случаев инженеры Google действуют разумно, поэтому этот вид меня удивил.

Это вызовет столкновения с другими версиями API сервлета, выведенными через зависимости Maven:

  • Путь к классу webapp, вероятно, будет содержать версия, связанная с GWT;
  • контейнер может отказаться от загрузки GWT jar, так как содержит javax.servlet пакет;
  • в большинстве случаев это будет вероятно, отклонят пути класса Отладчик IDE и действительно выполнение VM.

Ссылка на рассматриваемую банку (просто так вы видите то же самое после распаковки, как и я, если вы не верите, что GWT содержит классы API сервлета в той же банке): http://repo1.maven.org/maven2/com/google/gwt/gwt-user/1.7.0/gwt-user-1.7.0.jar

Ответ 1

Вы не должны включать gwt-dev.jar или gwt-user.jar в свой военный файл. Вам нужна только gwt-servlet.jar в вашей войне, и это тоже, только если вы используете RPC. Если вы заметили, gwt-servlet.jar(по иронии судьбы) не содержит классов сервлетов.

  • gwt-dev.jar содержит компиляторы и компоновщики. Ваш код никогда не понадобится для компиляции.
  • gwt-user.jar содержит структуру gwt, которая в конечном итоге переводится на javascript. Вам это нужно только в режиме разработки.
  • gwt-servlet.jar содержит код на стороне сервера, который необходим, если вы используете инфраструктуру RPC. Это единственная банка, которая должна присутствовать в вашем военном файле.

Ответ 2

Причина, по которой классы находятся в пакете, - предоставить полное рабочее решение для пользователей, которые используют только файл gwt-user в разработке. Без него GWT RPC не будет компилироваться. Это общее представление команды GWT, которое можно найти в этом оживленном обсуждении трекера GWT: http://code.google.com/p/google-web-toolkit/issues/detail?id=3851

Однако GWT 1.7 также содержит исходные файлы javax, что может вызвать дополнительные проблемы. Например, для maven и, возможно, также для тех точек, которые вы упомянули. Это было рассмотрено в GWT-проблеме, а в более поздней версии GWT исходные файлы javax были удалены из файла jar gwt-пользователя.

Для развертывания вы должны использовать gwt-servlet jar, который не содержит классы javax или любые другие сторонние библиотеки. В прошлом несколько случаев могли случиться, что файлы GWT, предназначенные для использования на стороне клиента, которые также использовались на стороне сервера, отсутствовали в файле jw-servlet gwt-servlet. Потеря этих проблем была устранена, а классы добавлены в файл jar сервлета. Если вы все еще находите GWT-класс, который вам нужен, из gwt-сервлета вам нужно подать отчет о проблеме. В вашем случае, если вы используете 1.7, это может означать переход на более новую версию GWT.