#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.