Условная компиляция GWT

Я использую один и тот же исходный код для приложений GWT 1.5 и GWT 1.7.

Мне интересно, есть ли способ условно скомпилировать части кода Java для той или иной версии.

Я знаю, что есть способ сделать это для виджетов и браузеров в файле XML модуля.


person Drejc    schedule 11.08.2009    source источник
comment
Я так не думаю. Зачем компилировать для двух исходников GWT? Перешли с 1,5 на 1,7 без проблем.   -  person Robert Munteanu    schedule 11.08.2009
comment
Мы сделали. Но в одном случае старый (1.5) и новый (1.7) скомпилированный код ведут себя по-разному. Это комбинация java и встроенных скриптов. Перемещение старого (1.5) кода на новые интерфейсы с удалением всех устаревших вызовов в настоящее время требует много работы.   -  person Drejc    schedule 12.08.2009


Ответы (3)


Решение очень простое.

String version = GWT.getVersion();
if (version.startsWith("1.5"))
{
  // do something the 1.5.* way
}
person Drejc    schedule 12.08.2009

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

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

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

person David Nouls    schedule 11.08.2009

if (version.startsWith("1.5")) { // делаем что-то в стиле 1.5.* }

На самом деле это плохая идея. В идеале вы должны использовать здесь абсолютные строковые значения, потому что компилятор GWT оценит равенство и обрежет недостижимый код внутри условного выражения if из скомпилированного вывода. Использование .startsWith означает, что весь код попадет в конечное приложение.

К сожалению, версия GWT не является свойством времени компиляции. Возможно, лучший способ сделать это — создать пустую реализацию генератора, которая просто возвращает «ClassName15» или «ClassName17» из вызова в вашем модуле для «ClassName». Затем вы можете во время компиляции вызвать About.version() из генератора и узнать версию во время компиляции.

person kebernet    schedule 23.08.2009
comment
Спасибо за указание на это, но это единственное решение, которое я нашел. И это только для небольшого фрагмента кода. Так что решение работает отлично для меня. - person Drejc; 30.08.2009