В GWT 2.0 CssResource, как я могу отключить обфускацию для всех моих классов css?

#gwt #gwt2 #cssresource #clientbundle

#gwt #gwt2 #cssresource #clientbundle

Вопрос:

У меня есть CssResource, где я хочу, чтобы некоторые классы css были «сопоставлены» с методами:

 @ClassName("top-table")
String topTable();
  

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

Есть ли простой способ добиться этого? Я знаю, что могу использовать @external в моем файле css, но тогда я должен определить все мои классы css, такие как @external .c1, .c2, .c3 и т.д…

Что-то вроде @external .* решило бы мою проблему, но, похоже, это недоступно, по крайней мере, в gwt 2.0.x

Мое текущее решение заключается в использовании:

 <set-configuration-property name="CssResource.style" value="pretty"/>
  

Но это не отключает обфускацию, просто делает ее красивее 🙂 Я знаю, что obf необходим, чтобы избежать столкновений, но в моем случае этого нет, и я действительно хотел бы отключить обфускацию

Комментарии:

1. Куда именно вы поместили эту строку <set-configuraion-property> ?

2. Это следует повторно открыть, поскольку связанные вопросы и ответы были созданы после моего первоначального вопроса, и мой вопрос содержит больше и лучшие ответы… Не имеет смысла закрывать старый вопрос как дублирующий….

Ответ №1:

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

Короче говоря, в устаревшем файле css, который вы привязываете с помощью CssResource bundle, поместите это объявление: @external .*;

Все классы в файле, который содержит этот файл объявления, не будут обфускированы.

Ответ №2:

Согласно документации GWT, можно отключить ofbuscation вообще. Из раздела CssResource «рычаги и ручки»:

Для свойства конфигурации CssResource.style может быть установлено значение pretty, которое отключит обфускацию имени класса, а также pretty-печать содержимого CSS. Объедините это со значением ClientBundle.enableInlining, равным false, чтобы создать CSS-выражение, которое можно редактировать на стороне клиента.

В моем рабочем проекте GWT я вижу, что это свойство фактически установлено в Resources.gwt.xml (входит в gwt-user.jar ):

   <!-- This can be used to make CssResource produce human-readable CSS -->
  <define-configuration-property name="CssResource.style" is-multi-valued="false" />
  <set-configuration-property name="CssResource.style" value="obf" />
  

Что мне неясно, так это как переопределить это значение, поскольку оно уже установлено. Вам удалось это выяснить?

Ответ №3:

Вы можете использовать @external директиву, чтобы предотвратить обфускацию имени класса css.

В вашем случае ваш файл css может содержать

 @external top-table;
.top-table {
  some: rule;
}
  

Комментарии:

1. «Есть ли простой способ добиться этого? Я знаю, что могу использовать @external в моем файле css, но тогда я должен определить все мои классы css, такие как @external .c1, .c2, .c3 и т.д. » Выполнение этого для всех классов отнимает слишком много времени : (

Ответ №4:

Чтобы не запутывать имена классов, вам просто нужно добавить следующую строку в свой gwt.xml файл:

   <set-configuration-property name="CssResource.style" value="stable" />
  

При установке значения stable имена классов будут состоять из имени класса, за которым следует имя метода в ваших интерфейсах ресурсов (конечно, со всеми . заменено на _)

Все возможные значения для CssResource.style (для gwt 2.7) являются:

  • довольно
  • отладка
  • стабильный
  • стабильный-shorttype
  • стабильный-notype

Чтобы проверить значения, доступные для вашей версии gwt, посмотрите на com.google.gwt.resources.rg.CssObfuscationStyle javadoc (или исходный код) для используемой вами версии gwt.