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

    Привет %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 файлов.
    Примеры:
    До сжатия
    После сжатия
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

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

      +2
      пример работы показать можете?
        0
        что вы имеете ввиду? где он используется или сорцы файлов после сжатия?
          +1
          сорцы файлов после сжатия
            0
            что-то мне подсказывает, что получится то же самое, что и у YUI compressor’а
              0
              Логично, обсобенно если заметить, что в самом начале и написано что он его испоьзует для обфускации файлов, кэп.

        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

        Самое читаемое