GWT — включение исходных файлов вне иерархии пакетов модуля

#gwt #build #build-process

#gwt #сборка #процесс сборки

Вопрос:

У меня есть проект GWT в eclipse со следующей структурой для модуля GWT

 com.foo.gwt -> Dashboard.gwt.xml
com.foo.gwt.client
com.foo.gwt.server
  

У меня разные пакеты com.bar.baz1 , com.bar.baz2 и т.д. содержимое которых я хочу включить в код на стороне клиента. Все файлы совместимы с преобразованием GWT JAVA-> JS.

Проблема в том, что тег <source> в Dashboard.gwt.xml , рассматривает путь как относительный к каталогу Dashboard.gwt.xml . Поэтому я не могу ссылаться ни на что вне com.foo.gwt иерархии.

Итак, я создал новый модуль MyNewModule.gwt.xml в com.bar и включил baz1 и baz2 вложенные пакеты, используя относительные пути в теге. Наконец я сделал Dashboard.gwt.xml для наследования нового модуля.

Это отлично работает при компиляции модуля Dashboard, но не работает при компиляции MyNewModule. Это потому, что некоторые классы в MyNewModule ссылаются на классы модуля Dashboard.

Я попытался наследовать модуль Dashboard в MyNewModule. Это создает циклическую ссылку, но GWT не жалуется на это. Все работает, но меня не устраивает циклическая ссылка. Мне не нужен MyNewModule, все, что мне нужно, это способ включения кода из пакетов вне иерархии модуля Dashboard.

Мне интересно, почему GWT не разрешает абсолютные пути к исходным кодам.

Я что-то здесь упускаю?

Ответ №1:

Вам не нужно компилировать каждый модуль отдельно. При компиляции вашего проекта com.foo.gwt компилятор GWT будет искать все зависимости в вашем com.foo.gwt.xml файл и скомпилирует ВСЕ .java-файлы как вашего com.foo и com.bar.baz. (и другие библиотеки) для javascript.

Как вы сказали, правильно поместить MyNewModule.gwt.xml в проекте com.bar.baz и «наследовать» его в вашем DashBoard.gwt.xml файл. Часть, которую вам не хватает, — создать файл .jar с проектом MyNewModule и поместить в папку war / WEB-INF / lib (просто gwt.xml файл и скомпилированные классы Java).

Комментарии:

1. Да, я это заметил. У меня есть скрипт сборки, который явно не компилирует новый модуль, и все работает. Когда я установил плагин Google для Eclipse, он начал автоматически компилировать каждый модуль в проекте, что заставило меня подумать, что это важный процесс. Мне не нужен jar, хотя, поскольку я не планирую использовать MyNewModule отдельно, он был создан только потому, что абсолютные пути к исходным кодам не разрешены.