Как стать автором
Обновить

Cactus Obfuscator обфускатор JavaScript/CSS

Время на прочтение4 мин
Количество просмотров7.3K
Привет %username%,
Сегодня, я бы хотел, представить сообществу утилиту написанную мои другом Николаем Бабинским — Cactus Obfuscator.
Cactus Obfuscator — это трех-модульное приложение созданное для обфускации JavaScript и CSS кода.

Cactus Obfuscator использует:
Apache Maven — плагин для Maven версий 2-3.
YUI Compressor — js/css обфускация.
Simple XML — XML мэппинг и (де)сериализация.

Содержание:
1. Использование как Maven плагина.
2. Использование как консольного приложения.
3. Создание конфигурационных файлов(XML).


Cactus может использоваться, как Maven плагин в java-проектах, а так же, как консольная утилита.


Использование как Maven плагина.
Это очевидно, что для использования Maven плагина, нам понадобится установленный Maven версии 2 или 3 (на скачивание предоставлен cactus-plugin.jar для 3 версии Maven, чтобы получить *.jar для 2 версии достаточно просто отослать СМС собрать его из исходников той версией, что вам нужна).

1. Чтобы собрать Cactus из исходников требуется выполнить следующие действия:
— Скачать и перейти в скачанную директорию:
      git clone git@github.com:nbabinski/Cactus.git
      cd Cactus

— Установка:
      mvn install


2. Установка скомпилированного пакета cactus-plugin.jar.

Открываем терминал и пишем следующее:
mvn install:install-file -Dfile=DOWNLOAD_FOLDER/cactus-plugin.jar -DgroupId=com.cactus -DartifactId=cactus-plugin -Dpackaging=maven-plugin -Dversion=0.1
Где «DOWNLOAD_FOLDER» путь до cactus-plugin.jar

Если инсталяция прошла успешно видим примерно следующюю картину:
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.702s
[INFO] Finished at: Tue Apr 19 01:36:31 EEST 2011
[INFO] Final Memory: 2M/48M

Поздравляю, Cactus успешно установлен. Осталось сконфигурирофать pom.xml вашего проекта:
<build>
    <plugins>
    ...
        <plugin>
            <groupId>com.cactus</groupId>
            <artifactId>cactus-plugin</artifactId>
            <version>0.1</version>
            <configuration>
                <jsBaseDirectory>src/main/webapp/js</jsBaseDirectory>
                <outputDirectory>cache</outputDirectory>                    
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>obfuscate</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    ...
    </plugins>        
</build>

Где:
baseDirectory — (необязательное)директория проекта. По умолчанию ${project.basedir}.
jsBaseDirectory — (обязательное) Относительный путь от baseDirectory до директории с JavaScript/CSS кодом.
confingDirectory — (необязательное) путь до папки с конфигурационным файлом cactus.xml, по умолчанию тот же что и jsBaseDirectory.
outputDirectory — (необязательно) относительный путь от jsBaseDirectory до директории с обработанными/обфусцированными файлами. Директория должна существовать.
mode — (необязательно) Существует два режима работы — PRODUCTION/DEBUG. По умолчанию режим установлен в PRODUCTION, то есть файлы склеиваются и обфусцируются. В режиме DEBUG — файлы только склеиваются, но не обфусцируются.

После подключения в pom.xml вы можете попробовать mvn package, чтобы собрать проект. Так же Cactus плагин может использоваться и без проекта, все что нам нужно это наличие cactus.xml файла. Зайдя в папку с cactus.xml достаточно набрать в консоли:
mvn com.cactus:cactus-plugin:obfuscate

Использование как консольного приложения.
Cactus может использоваться и без Maven, просто из консоли. Все что нам нужно это установленный на машине JVM.
Как использовать:
1. Создать cactus.xml конфигурационный файл.
2. Запустить cactus-tool:
java -jar cactus-tool.jar
По умолчанию cactus-tool требует только один параметр -c — путь до папки содержащей cactus.xml.
Так же есть следующие параметры:
-d — относительный путь до js файлов от директории указанной в -c
-o — относительный ауть до директории с результатами обфускации. Если не указан то результаты будут помещены в директорию -d
-m — режим работы PRODUCTION/DEBUG. Описан выше.

Пример использования:
java -jar cactus-tool.jar -d ../web/js -o cache

Создание конфигурационных файлов(XML)

Пример конфигурационного файла:
<?xml version="1.0" encoding="UTF-8"?>
<cactus>
    <js>
        <needles>       
            <needle>
                <output>ext-3.1.0.js</output>
                <files>
                    <file>https://ajax.googleapis.com/ajax/libs/ext-core/3.1.0/ext-core-debug.js</file>
                </files>
            </needle>
            <needle>
                <output>jquery-1.5.2.js</output>
                <files>
                    <file>https://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.js</file>
                </files>
            </needle>
        </needles>
    </js>

    <css>
        <needles>       
            <needle>
                <output>test.css</output>
                <files>
                    <file>YOUR_CSS_FILE_HERE</file>
                </files>
            </needle>
        </needles>      
    </css>
</cactus>


Пример показывает конфигурационный файл с тремя файлами на выход (needles, в переводе — иголки потому и кактус, собственно говоря): ext-3.1.0.js, jquery-1.5.2.js and test.css

После запуска:
mkdir cactus-test
cd cactus-test
//copy cactus.xml and cactus-tool.jar in cactus-test folder
java -jar cactus-tool.jar -c PATH_TO_CACTUS_CONFIG_FOLDER

— Мы получим как результат 2 js файла.

Тэг file позволяет вводить URL, пути, имена файлов. Все папки должны быть внутри BASE директории(-c). Например для структуры:
|-root
|--batch
| | - cactus-tool.jar
|--webapp
|----js
| |--cactus.xml
| |--boo.js
| |--foo.js
| |--utils
| | |--array.js
| | |--string.js
| | |--parser
| | | |--xmlparser.js
| |--cache


Нужен следующий cactus.xml:
<?xml version="1.0" encoding="UTF-8"?>
<cactus>
    <js>
        <needles>       
            <needle>
                <output>test.js</output>
                <files>
                    <file>boo.js</file>
                    <file>utils</file> <!-- get all js files from utils folder-->
                    <file>utils/parser/xmlparser.js</file>
                </files>
            </needle>
        </needles>
    </js>
</cactus>


Далее запускаем cactus-tool из root/batch директории:
java -jar cactus-tool.jar -c ../webapp/js -d ../webapp/js -o cache
В данном примере cactus.xml находится в js директории поэтому -c и -d параметры совпадают.
В результате мы получим test.js файл в папке root/webappjs/cache, который является результатом слияния и обфускации файла boo.js, всех файлов из директории utils и utils/parser/xmlparser.js.
Последовательность тегов file важна, она отражает в каком порядке будут склеены файлы в результате.

UPD
Дабы зарубить на корню огромное колличество ненужной полемики, напишу еще раз, что для обфускации используется YUI Compressor.
Сам по себе, Cactus написан для упрощения сборки и сжатия js/css файлов.
Примеры:
До сжатия
После сжатия
Теги:
Хабы:
+4
Комментарии5

Публикации

Истории

Работа

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн