Добавление пакетов Java в GWT - PullRequest
10 голосов
/ 13 января 2009

Я попытался выполнить поиск, но не смог придумать, как добавить свои собственные пакеты в проект 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

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

Ответы [ 2 ]

9 голосов
/ 11 марта 2010

, даже несмотря на то, что, как указал @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"

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

5 голосов
/ 14 января 2009

Вы можете избавиться от двух исходных линий пути, потому что по умолчанию 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, если они не эмулируются. Тем не менее, все ваши собственные классы могут быть использованы.

...