Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

У меня есть 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" />

Убедитесь, что вы включили не-gwt-проект в путь класса gwt-project в eclipse. Это нормальная дрель; щелкните правой кнопкой мыши на gwt-проекте, выберите свойства, выберите "Путь сборки Java", нажмите вкладку "Проекты" и "не-gwt-project"

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

Удачи!

Ответ 2

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

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

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

Ответ 3

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

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

  • Убедитесь, что все это "GWT safe", что означает, что он не ссылается на классы 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'/ >

Ответ 4

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

<source path=""></source>

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

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

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

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

Ответ 5

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

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

  • Свяжите проект библиотеки со всеми соответствующими проектами ("Проект Preferences "- > " Java Build Path "- > " Проекты "- > " Добавить... ")
  • Затем добавьте клиентский код библиотеки (добавив его как модуль.) Поэтому отредактируйте gwt.xml вашего приложения и добавьте например, где SuperLib - это имя файла gwt.xml в вашей библиотеке проект, и до этого это пакет, в котором он находится.
  • Добавьте код в проект, связав исходную папку. К сожалению, это необходимо, если вы не хотите писать Ant script для компиляции вашего приложения. (Если вы предпочитаете Ant проверить это вне) Мне не нравится идея использования такого script, потому что если вы забываете запускать его каждый раз, когда вы вносите изменения, вы окажетесь в путаница - позволяет перейти на удобный, автоматический путь.

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

    • Щелкните правой кнопкой мыши папку "Путь сборки" → "Использовать в качестве исходной папки". Готово. Удивительно, что плагин GWT для Eclipse не выполняет ссылки на проект, поэтому все ссылки должны быть ясными или вы получите много следующих: ClassNotFoundException.

Ответ 6

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

<source path="common" />

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

Ознакомьтесь с разделом XML Element Reference этого doc

Ответ 7

В своем проекте gwt перейдите к свойствам, пути сборки Java, источнику, щелкните ссылку "Источник ссылок" и укажите на свой исходный пакет проекта без gwt, который вы хотите включить.

Ответ 8

Изменить: найдено исправление затмения. Запустите config > Classpath > Дополнительно > Добавить папку > 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.

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

  • Используя метод в принятом ответе, выбирается другой проект /src/foo.gwt.xml(жалуется, если недоступен), и статические значения из классов подбираются. Ничего другого. Очень странно.

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