Добавление пакетов Java в GWT

Я попытался выполнить поиск, но не смог определить определенный способ добавления ваших собственных пакетов в проект GWT.

Моя древовидная структура выглядит следующим образом:

-com.mycompany
  -public
    MyApplication.html
  MyApplication.gwt.xml


-com.mycompany.client
  MyApp.java

-com.mycompany.gui
  TableLayout.java

В ответе, который я видел там, говорится, чтобы добавить пакеты относительно корневого каталога файла gwt.xml, например:

<module>
  <inherits name="com.google.gwt.user.User" />
  <entry-point class="com.mycompany.client.MyApp" />
  <source path="client" />
  <source path="gui" />
</module>

Затем он жалуется:

Unable to find type 'com.technicon.client.MyApp'
   Hint: Previous compiler errors may have made this type unavailable
   Hint: Check the inheritance chain from your module; it may not be inheriting a required module or a module may not be adding its source path entries properly

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

Ответ 1

Вы можете избавиться от двух строк исходного пути, потому что по умолчанию GWT будет получать все, что связано с корнем, и в клиентском пакете, как у вас. Вам также нужно перенести свой пакет gui в свой клиентский пакет, чтобы он стал следующим:

-com.mycompany
  -public
    MyApplication.html
  MyApplication.gwt.xml


-com.mycompany.client
  MyApp.java

-com.mycompany.client.gui
  TableLayout.java


<module>
  <inherits name="com.google.gwt.user.User" />
  <entry-point class="com.mycompany.client.MyApp" />
</module>

Предполагая, что ваш MyApp.java является фактическим EntryPoint, тогда это должно работать нормально.

Еще одно замечание: вы не можете использовать классы Java, которые не являются частью библиотеки GWT JRE Emulation, и ваш проект не будет компилироваться, если вы это сделаете. Вы должны получить очень конкретные ошибки об этом, хотя. Например, вы не можете использовать классы библиотек, такие как java.math.BigDecimal, если они не эмулируются. Все ваши собственные классы, которые вы создаете, могут быть использованы.

Ответ 2

хотя, как отметил @rustyshelf, gwt автоматически преобразует все, что находится под client.*, будет время, когда вы захотите сохранить вещи за пределами своих клиентских пакетов (повторное использование их в нескольких проектах может быть одним из их), и для этого решение по-прежнему находится в добавлении других пакетов в процесс с использованием элемента source.

теперь есть трюк, вам нужно решить, хотите ли вы переместить файл конфигурации gwt.xml или вам нужно создать новый.

для вашего случая в частности (где оба пакета совместно используют корень в пакете com.mycompany), вы можете просто переместить файл <project_name>.gwt.xml в самый распространенный пакет и просто добавить новый пакет в качестве источника (и сохранить <source path="client"/> там также), что делает ваш файл похожим:

<source path="client"/>
<source path="gui"/>

с другой стороны, если пакеты не имеют общего корня, просто создайте новый файл *.gwt.xml только с исходными элементами и поместите его в родительский пакет в подпакет, который вы хотите добавить, то есть:

<module>
   <source path=""/>
</module>

обратите внимание, что если вам нужно предоставить доступ к компиляции для вложенных подпакетов, разделите их с помощью /, как в "admin/client"

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