Нужна помощь Упаковка модуля библиотеки GWT в JAR - PullRequest
3 голосов
/ 24 декабря 2011

Я пытаюсь упаковать модуль библиотеки GWT в файл JAR и использовать библиотеку в отдельном веб-приложении GWT, добавив файл JAR в путь к классам.

JAR содержит:

  • Исходники Java
  • RequestFactory сгенерированных источников
  • UiBinder генерирует источники
  • файлы классов
  • дескриптор библиотечного модуля
  • XML-файлы UiBinder

Модуль библиотеки унаследован от веб-приложения:

<module> <!-- my web app's module descriptor -->
    ...
    <inherits name="[path to my library module].Library"/>
    ...
</module>

Однако я сталкиваюсь с

Deferred binding failed for '[path to mylibrary].client.ClientFactory'...

ошибка при попытке запустить веб-приложение, которое инициализирует библиотеку с помощью метода onModuleLoad (). Сбой вызван представлениями UiBinder и RequestFactory, которые использует модуль библиотеки. Запуск в режиме разработки или компиляция веб-приложения приводят к ошибкам с сообщениями о том, что отсутствуют файлы CSS и недопустимые ссылки на сгенерированный источник в пакете emul.java.util (я пытался включить этот пакет и все другие сгенерированные источники в JAR, но t help.)

Может кто-нибудь сказать мне, что должно быть включено в JAR? Есть ли какие-либо дополнительные ресурсы, необходимые для библиотечных модулей, которые используют UiBinder и RequestFactory?

Кто-нибудь успешно упаковал модуль библиотеки GWT, который использует RequestFactory и UiBinder, в JAR?

Дальнейшее уточнение: Вопрос о создании модуля библиотеки GWT; модуль, который включает клиентские и серверные компоненты, RequestFactory и UiBinder. Обратите внимание, что модуль библиотеки GWT упакован в JAR, тогда как обычный модуль GWT с точкой входа упакован в WAR. Мои попытки упаковать такой библиотечный модуль и GWT <inherit> из другого проекта GWT потерпели неудачу.

1 Ответ

2 голосов
/ 28 декабря 2011

Либо я неправильно понял ваш вопрос, либо вы неправильно коррелировали компиляцию GWT с компиляцией байт-кода Java.

Традиционная разработка Java

  1. Исходный код Java скомпилирован в файлы байт-кода Java .class.
  2. Скомпилированные файлы .class во время разработки, а также во время развертывание.
  3. скомпилированные файлы .class могут использоваться в classpath обоих разработка и внедрение
  4. Не имеет значения, являются ли файлы .class файлами jar или в папке иерархия, если их местоположение соответствует их пространство имен пакета.
  5. Исходные файлы Java не могут быть развернуты в пути к классу развертывания, но вы можете развернуть исходные файлы JSP в войне как JSP.

Не так для GWT.

  1. GWT - разработка на стороне клиента.
  2. GWT компилируется в Javascript.
  3. Полученный JavaScript упакован в военную папку.
  4. Т.е., GWT, скомпилированные в исполняемые файлы, являются файлами javascript.
  5. Компиляция GWT требует, чтобы все классы Java были исходными файлами.
  6. Любая библиотека Java, на которую ссылаются ваши классы Java, также должна быть исходными файлами Java.

GWT война

  1. GWT также облегчает выравнивание на стороне клиента и связь со стороной сервера.
  2. На стороне сервера обычно используется традиционная Java, развернутая в военной структуре JEE.
  3. Поэтому в ходе развертывания клиент GWT скомпилирован в javascript, а также файлы байт-кода JEE .class.
  4. Однако файлы JWascript GWT помещаются в видимую для URL часть войны вместе с HTML, CSS и другими URL-адресуемыми ресурсами.
  5. Скомпилированные на стороне сервера файлы Java-байт-кода или jar-файлы помещаются в каталоги классов и lib, которые не являются URL-адресными.

Поэтому

  1. Скомпилированные GWT структуры развертывания нельзя использовать для разработки.
  2. GWT скомпилирован в структуру войны за развертывание JavaScript.
  3. Нет такой вещи, как упаковка скомпилированных ресурсов GWT в банка для размещения.
  4. Скомпилированные ресурсы GWT должны быть упакованы в URL-адрес сторона войны.
  5. В скомпилированных файлах javascript "нет такой вещи", как classpath. Любая концепция пути к классам в javascript моделируется для удобства JSNI.

В заключение

Скомпилированные ресурсы GWT непригодны для использования и не будут видны для разработки GWT, потому что ... Разработка GWT требует наличия исходного кода Java, а развертывание клиента GWT - это javascript на войне, и javascript не похож на jar / файлы байт-кода.

Следовательно, в GWT «нет такой вещи», как упаковка jar, которая может использоваться как для разработки, так и для развертывания. В некоторых примерах и руководствах файлы разработки и развертывания пакетов объединяются в один jar-файл, но этот jar-файл по сути представляет собой zip-архив, с помощью которого сначала нужно отделить части развертывания от частей для разработки.

GWT Файлы разработки = исходные банки,

Развертывание GWT = война JavaScript и ресурсов.

Прежде чем приступить к разработке GWT, у вас должно быть не менее 3-6 месяцев опыта написания традиционных приложений JEE с JSP, сервлетами, HTML и javascript. Это поможет вам привить сильное чувство сегрегации на стороне сервера и на стороне клиента, войны на jar и, следовательно, понять, почему GWT был изобретен в первую очередь. Вы бы поняли процесс развертывания.

...