Как написать клиентский и серверный коды отдельно в проекте playN?

Обычные проекты GWT имеют клиентский код и серверный код. Я хочу написать отдельный клиентский и серверный код в одном проекте playN. Когда я компилирую свой текущий проект, я получаю такие ошибки, как не удалось найти модуль java.lang.Thread, так как он не поддерживается клиентским кодом GWT. Для моего проекта мне нужно добавить много серверного кода, и мне нужны полные пакеты Java.

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

Как я могу разделить код клиента и код сервера таким образом, чтобы он не выдавал мне ошибку, как указано выше? Если мы можем разделить код клиента и сервера, есть ли способ добавить библиотеку только для кода на стороне сервера?

Заранее спасибо..


person Rockcollins    schedule 09.03.2012    source источник


Ответы (1)


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

<source path='client' />

внутри вашего файла .gwt.xml. Другой путь в папке файла модуля компилируется как код на стороне сервера.

Чтобы лучше понять вашу проблему, я клонировал витрину образец игры. , затем я взглянул на иерархию файлов (кстати, часть GWT подробно описана).

showcase/
   android/
      ...
   core/
      ...
   flash/
      ...
   html/
      src/
         main/
            java/
               playn/
                  showcase/
                     html/
                        ShowcaseHtml.java
                     Showcase.gwt.xml
            webapp/
               WEB-INF/
                  web.xml
               Showcase.html
      pom.xml
   ios/
     ...
   java/
     ...
   build.xml
   pom.xml

Как мы видим, у нас есть html/src/main/java/playn/showcase/Showcase.gwt.xml рядом с html/src/main/ java/playn/showcase/html.

Вот содержимое Showcase.gwt.xml:

<module rename-to='showcase'>
  <inherits name='playn.PlayN'/>
  <!-- for the peas sample -->
  <inherits name="org.jbox2d.GwtBox2D" />
  <!-- for the menu UI -->
  <inherits name='tripleplay.TriplePlay'/>
  <!-- for enhanced logging -->
  <inherits name="playn.logging.Enhanced" />

  <source path='core'/>
  <source path='html'/>

  <public path="resources" />

  <entry-point class='playn.showcase.html.ShowcaseHtml'/>
</module>

Итак, что касается моего опыта, если существует папка html/src/main/java/playn/showcase/server с кодом в ней, и нет ссылки на этот код из другой код, компилятор GWT должен избегать его. Затем с помощью maven его можно было бы скомпилировать, если бы он был объявлен соответствующим образом.

person Nicocube    schedule 09.03.2012
comment
Привет, в playN также в HTML-версии проекта у нас есть файл gwt.xml. что мы делаем, так это добавляем все разные пути к корневой папке пакета как ‹source path='foldername' /›. например, ‹исходный путь=ядро /› ‹исходный путь=html /› ‹исходный путь=правила /› ‹исходный путь=представление /› ‹исходный путь=util /› - person Rockcollins; 09.03.2012
comment
для одного проекта playN у вас будут такие проекты, как имя_проекта, имя_проекта-ядро, имя_проекта-android, имя_проекта-java, имя_проекта-html. У нас будет этот projectName.gwt.xml в html-версии. - person Rockcollins; 09.03.2012
comment
хорошо, насколько я понимаю, у вас есть папка projectName-html/, содержащая имя проекта.gwt.xml с ‹исходным путем=core /› ‹исходным путем=html /› ‹исходным путем=rules /› ‹исходным путем=view /› ‹ source path=util /› директива. Что произойдет, если вы создадите сервер папок в projectName-html/ и поместите в него код на стороне сервера? (вообще не добавляя ‹исходный путь=сервер /›) - person Nicocube; 09.03.2012
comment
Ok. Позвольте мне попробовать это. То есть вы имеете в виду, что все зависит от того, в какой папке вы создаете класс? код в папке клиента будет преобразован в js, а код в папке сервера будет работать как код на стороне сервера Java? - person Rockcollins; 09.03.2012
comment
И ошибки взяты из библиотеки кода на стороне сервера, которую я унаследовал в файле gwt.xml. Как я могу указать это только на стороне сервера? в библиотеке я использую java.lang.Thread - person Rockcollins; 09.03.2012
comment
Между тем я забыл сказать вам, что в папке html нет кода, кроме точки входа в основной проект. Но я думаю, что могу сделать папки в ядре и сделать то же самое, верно? - person Rockcollins; 09.03.2012
comment
Основная работа GWT заключается в преобразовании классов, которые находятся в папках, обозначенных ‹source path='foldername' /› в JS. Но у него есть ограничение на класс JRE (код ). google.com/intl/fr-FR/webtoolkit/doc/latest/). java.lang.Thread не поддерживается, потому что на данный момент его нельзя перевести в JS. Другие папки не компилируются с помощью GWT, а с помощью простого javac, который вы должны настроить для генерации кода на стороне сервера (например, в WEB-INF/classes/‹package›/‹classname›.class) и объединить в файл войны. Это делается с помощью плагина GWT для eclipse и плагина maven gwt. - person Nicocube; 09.03.2012
comment
Привет, я понимаю это. Можете ли вы объяснить, как именно я могу настроить серверный код для компиляции с помощью обычного javac? мой проект компилирует весь мой код и включенную библиотеку другим способом и показывает ошибку для неподдерживаемых функций java. - person Rockcollins; 13.03.2012