Проект Eclipse 3.4 GWT 1.6 - как ссылаться на источник из других проектов? - PullRequest
19 голосов
/ 04 июня 2009

У меня есть проект GWT 1.6 в Eclipse 3.4, и я пытаюсь сослаться на источник из другого ( не-GWT ) проекта в моей рабочей области. Я добавил проект в путь сборки, но не могу запустить приложение в размещенном режиме. Когда я это делаю, я получаю сообщение об ошибке «исходный код недоступен».

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

Если вы действительно делаете это, не могли бы вы помочь мне с простой пошаговой настройкой? Буду очень признателен, спасибо!

Ответы [ 8 ]

16 голосов
/ 04 ноября 2009

У меня есть 2 проекта Eclipse. Один - это проект GWT, а другой - нет. Вот структура каталогов, которая работает для меня:

workspace
-- gwt-project
   -- src/main/java
      -- com.gwt.GwtProjectModule
         -- GwtProjectModule.gwt.xml
-- non-gwt-project
   -- src/main/java
      -- com.nongwt.package.that.contains.source.you.need
         -- nongwt.gwt.xml
      -- com.nongwt.package.that.contains.source.you.need.client

nongwt.gwt.xml говорит gwt заглянуть внутрь пакета «клиент», вот как это выглядит:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 1.7.0//EN" "http://google-web-toolkit.googlecode.com/svn/tags/1.7.0/distro-source/core/src/gwt-module.dtd">
<module rename-to='nongwt'>
    <inherits name='com.google.gwt.user.User' />
    <source path="client" />
</module>

GwtProjectModule.gwt.xml может затем наследовать исходный код от nongwt. Вот соответствующая строка из GwtProjectModule.gwt.xml:

<inherits name="com.nongwt.package.that.contains.source.you.need.nongwt" />

Убедитесь, что вы включили non-gwt-project в classpath gwt-project в eclipse. Это нормальное упражнение; щелкните правой кнопкой мыши на gwt-проекте, выберите свойства, выберите «Java Build Path», перейдите на вкладку «Projects» и «non-gwt-project»

Или вместо того, чтобы не включать gwt-project в classpath gwt-project в качестве ссылки на проект, вы также можете создать jar-содержимое содержимого не-gwt-project, убедиться, что вы включили источник в jar, а затем включить баночка в пути к классам gwt-проекта.

Удачи!

3 голосов
/ 17 августа 2011

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

как только вы создали конфигурацию запуска, откройте ее, запустите> запустить конфигурации ... перейдите на вкладку classpath и выберите записи пользователя. добавьте расширенную> папку и выберите исходную папку вашего другого модуля проекта. Если вы, как и я, разделили файл conf модуля в папке src / main / resources, вы также должны добавить его.

должно работать.

1 голос
/ 20 сентября 2016

Это фантастическое решение вашей проблемы, предложенное Свеном Бушбеком (должно быть, норвежец, смеется!), Сработало для меня!

При работе над несколькими крупномасштабными проектами (в Eclipse) удобно и, конечно, более эффективно обмениваться и повторно использовать код через общие библиотеки. Хотя они находятся на ранней стадии, их нужно сильно изменить, и поэтому удобно связывать проекты вместо создания новых jar-файлов при каждом обновлении библиотеки. К сожалению, этот стандартный подход для разработки Java в Eclipse не работает так просто, как в случае с простыми старыми проектами Java, он требует всего три шага:

  1. Свяжите проект библиотеки со всеми соответствующими проектами («Проект Настройки »->« Путь сборки Java »->« Проекты »->« Добавить… »)
  2. Затем добавьте код библиотеки на стороне клиента (добавив его как модуль.) Поэтому отредактируйте gwt.xml вашего приложения и добавьте например где SuperLib - это имя файла gwt.xml в вашей библиотеке проект, а до этого - пакет, в котором он находится.
  3. Добавьте код в проект, связав исходную папку. К сожалению, это требуется, если вы не хотите писать муравей скрипт для компиляции вашего приложения. (Если вы предпочитаете муравей проверить это выходит) Мне не нравится идея использовать такой скрипт, потому что если вы забываете запускать его каждый раз, когда вносите изменения, вы в конечном итоге путаница - тогда давайте перейдем к удобному, автоматическому пути.

    • Добавить папку в проект вашего приложения; откройте «расширенный» раздел в диалоговом окне создания папки, выберите «Ссылка на альтернативное местоположение» и выберите исходную папку (обычно «src») вашего библиотечного проекта. (Совет: если вы работаете в команде, использующей систему управления версиями, вы можете создать переменную для этой папки и использовать ее вместо этого. Таким образом, каждый из ваших коллег может поместить проект библиотеки в другую папку и приспособиться для этого, настроив переменная :))

    • Щелкните правой кнопкой мыши папку «Build Path» -> «Use as Source Folder». Готово. Удивительно, но плагин GWT для Eclipse не поддерживает связывание проекта, поэтому все ссылки должны быть явными, иначе вы получите много следующего: ClassNotFoundException.

1 голос
/ 21 июля 2009

Боден: добавьте следующее в файл модуля

<source path=""></source>

в дополнение к другим вашим источникам, например:

<source path=""></source>
<source path="com.acme.otherpackage"></source>

тогда компилятор не будет жаловаться.

По крайней мере, так я это решил. Не уверен, что использование path = "" позволяет включить все, я предполагаю, что это значение по умолчанию, когда источники не указаны.

1 голос
/ 06 июня 2009

Код на стороне клиента в вашем проекте GWT (классы в пакете клиента) не может ссылаться на классы, которых нет в модуле GWT.

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

  • Убедитесь, что все это «безопасно для GWT», что означает, что оно не ссылается на классы JRE, которые не эмулируются GWT (http://code.google.com/webtoolkit/doc/1.6/RefJreEmulation.html),, или не ссылается на классы, которые ссылаются на классы JRE, не эмулированные
  • Убедитесь, что все указанные классы находятся в модуле GWT. Это означает помещение файла MyOtherProject.gwt.xml в ваш другой проект, и все упомянутые классы должны быть в клиентском подпакете
  • Сделайте ваш проект GWT наследуемым от другого проекта. Поэтому добавьте следующее в файл модуля gwt.xml вашего проекта GWT:

<наследует name = 'com.yourCompany.otherProject.MyOtherProject' />

0 голосов
/ 26 августа 2016

Редактировать: найдено исправление затмения. Запустите config> Classpath> Advanced> Добавить папку> otherproject / src.

Причина: Eclipse добавляет папки bin экспортируемых проектов. GWT нужны папки src.

Разработка моего комментария.

Я использую gwt 2.8 в Eclipse Neon, Java 1.8.0_92. Ссылка на другой проект в eclipse не запускает devmode, потому что он не может найти источник для упомянутых файлов из другого проекта.

Что сработало:

Полностью переключен на 'ant devmode'. Внесены следующие изменения в build.xml:

<target name="gwtc" ...>
    <java ...>
      <classpath>
        <pathelement location="src"/>
        <pathelement location="../otherproject/src"/><!-- Added -->
...
...
  <target name="devmode" ...>
    <java ...>
      <classpath>
        <pathelement location="src"/>
        <pathelement location="../otherproject/src"/><!-- Added -->

Теперь создайте производственную сборку с помощью 'ant' или запустите devmode с помощью 'ant devmode'.

Другие вещи, которые я заметил

  1. Используя метод в принятом ответе, извлекается otherproject / src / foo.gwt.xml (жалуется, если недоступен) и статические значения из классов. Больше ничего нет. Очень странно.

  2. Я понимаю, что исполняемые файлы DevMode / gwtc выбирают источники из своего пути к классам. Таким образом, все, что нужно, это затмение, чтобы добавить упомянутые проекты к пути их классов. Я не смог этого добиться, но это кажется возможным. ИСПРАВЛЕНО см. Вверху.

0 голосов
/ 28 июня 2010

В вашем проекте gwt перейдите к свойствам, пути сборки Java, источнику, нажмите «источник ссылки» и укажите на исходный пакет вашего не-gwt проекта, который вы хотите включить.

0 голосов
/ 04 июня 2009

GWT не знает об этом другом коде, потому что он не находится в каталоге клиента вашего проекта. Вам необходимо добавить исходный путь для другого кода в файл .gwt.xml. Просто добавил его в XML следующим образом

<source path="common" />

common - это каталог, где дополнительный код для этого примера.

Ознакомьтесь с ссылкой на XML-элемент этого документа

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...