Автоматизация компрессора Eclipse Yui

Eclipse PDT имеет удобный встроенный Yui Compressor в контекстном меню для файлов. Но при создании веб-приложения, которое использует несколько таких файлов, становится утомительно сжимать файлы вручную после каждого обновления. Он даже не запоминает, какие файлы сжимаются до каких имен файлов, поэтому вам нужно ввести это снова.

Можно ли легко автоматизировать этот процесс в Eclipse, чтобы вы могли щелкнуть «построить» или что-то еще, и все указанные файлы будут сжаты до своих целей?

В документации по этой функции Yui в Eclipse действительно есть вакуум.

Я использую Eclipse Indigo 3.7.0 с PDT 3.0.0.v20110516-11, но и PDT, и вариант Yui остались очень похожими со времен Galileo

-обновление-

Решения по автоматизации, не связанные с Eclipse, но близкие к ним:

  • GNU make makefile

    %-min.js: %.js
        ${java} -jar ${compressor} $< -o ${<:.js=-min.js}
    
  • Пакетная обработка Windows

    FOR %f IN (*.js) DO java -jar yuicompressor.jar %f -o deploy\%f
    
  • Linux Shellscript

    ls -1 *.js | awk '{printf("java -jar yuicompressor.jar %s -o deploy/%s",$1,$1)}' | /bin/sh
    
  • ANT файл

    См. Здесь: http://www.ubik-ingenierie.com/ubikwiki/index.php?title=Minifying_JS/CSS
    Как вставить сюда html / xml?

Также см. этот вопрос.


person Redsandro    schedule 14.02.2012    source источник
comment
Какую версию Eclipse и PDT вы используете?   -  person prodigitalson    schedule 14.02.2012
comment
Последние из доступных в репозитории Ubuntu 11.10. Я отредактировал свой исходный пост.   -  person Redsandro    schedule 15.02.2012
comment
Хорошо ... Мне нужно схватить Индиго - я все еще использую Гелиос.   -  person prodigitalson    schedule 15.02.2012


Ответы (4)


Ну, я действительно загрузил jar и создал задачу ANT для сжатия CSS и JS. Я работаю над Tomcat, поэтому он включает в себя задачи по загрузке материалов, очистке работы / каталога и тому подобному. Надеюсь, поможет.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE project>
<project name="MyProject" default="subir">

    <!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->

    <property name="project.name" value="MyProject" />

    <property name="src.dir" location="src" />
    <property name="web.dir" location="WebContent" />
    <property name="lib.dir" location="WebContent/WEB-INF/lib" />
    <property name="bin.dir" location="WebContent/WEB-INF/classes" />

    <property name="minify.dir" location="minified" />
    <property name="minify.sourcedir" location="${skin.dir}/resources/" />
    <!-- <property name="minify.sourcedir" location="${web.dir}/resources/" /> -->

    <!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->

    <property prefix="env" file="build.properties" />

    <path id="project.classpath">
        <pathelement location="${src.dir}" />
        <fileset dir="${lib.dir}">
            <include name="*.jar" />
        </fileset>
    </path>

    <path id="yui.classpath.minifier">
        <fileset dir="${lib.dir}">
            <include name="YUIAnt.jar" />
            <include name="yuicompressor-2.4.2.jar" />
        </fileset>
    </path>

    <!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->

    <target name="checkTomcatHome">
        <condition property="local.tomcathome.exists">
            <available file="${env.TOMCAT_PRUEBAS}" type="dir" />
    </condition>
    </target>

    <target name="subir" depends="checkTomcatHome" if="local.tomcathome.exists">

        <echo message="El servidor Tomcat destino existe, buscando archivos para copia en el proyecto y en en OsmoCore/WebContent..." />

        <copy todir="${env.TOMCAT_PRUEBAS}/webapps/${project.name}">
            <fileset dir="${web.dir}">
                <include name="**/*.*" />
            </fileset>
        </copy>

        <!--<echo message="Buscando archivos para copia en ${env.TOMCAT_PRUEBAS}/webapps/${project.name}/WEB-INF/classes..." />
        <copy todir="${env.TOMCAT_PRUEBAS}/webapps/${project.name}/WEB-INF/classes">
            <fileset dir="${bin.dir}">
                <include name="**/*.*" />
            </fileset>
        </copy>-->

    </target>

    <!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->

    <target name="WAR">

        <delete file="${project.name}.war"/>
        <delete dir="TMP_WAR"/>
        <mkdir dir="TMP_WAR"/>


        <copy todir="TMP_WAR">
            <fileset dir="${web.dir}">
                <include name="**/*.*" />
            </fileset>
        </copy>

        <copy todir="TMP_WAR/WEB-INF/classes">
            <fileset dir="${bin.dir}">
                <include name="**/*.*" />
            </fileset>
        </copy>

        <delete dir="${project.name}.war"/>

        <zip destfile="${project.name}.war">
            <zipfileset dir="TMP_WAR">
                <include name="**/*.*" />
            </zipfileset>
        </zip>

        <delete dir="TMP_WAR"/>

    </target>

    <!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->

    <target name="subirCompleto" depends="checkTomcatHome" if="local.tomcathome.exists">
        <echo message="El servidor Tomcat destino existe, buscando carpetas Work y ${project.name} en Webapps, para eliminar" />
        <delete dir="${env.TOMCAT_PRUEBAS}/work" />
        <delete dir="${env.TOMCAT_PRUEBAS}/webapps/${project.name}" />
        <antcall target="subir" />
    </target>

    <!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->

    <target name="borrarWork" depends="checkTomcatHome" if="local.tomcathome.exists">
        <echo message="El servidor Tomcat destino existe, buscando carpeta Work a eliminar..." />
        <delete dir="${env.TOMCAT_PRUEBAS}/work"/>
    </target>

    <!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->

    <target name="css.minify">

        <echo message="Creando directorio temporal ${minify.dir} (si no existe aún)..." />
        <mkdir dir="${minify.dir}" />

        <echo message="Borrando versión anterior de la carpeta temporal ${minify.dir}/css-min/..." />
        <delete dir="${minify.dir}/css-min/" />
        <echo message="Creando carpeta temporal ${minify.dir}/css-min/..." />
        <mkdir dir="${minify.dir}/css-min/" />

        <echo message="Copiando estructura de ${web.dir}/resources/styles/ en carpeta temporal..." />
        <copy todir="${minify.dir}/css-min/">
            <fileset dir="${minify.sourcedir}/styles/">
                <include name="**/*.*" />
            </fileset>
        </copy>

        <echo message="Borrando los CSS copiados a la carpeta temporal..." />
        <delete>
            <fileset dir="${minify.dir}/css-min/" >
                <include name="**/*.css"/>
            </fileset>
        </delete>

        <echo message="Comprimiendo!!!..." />
        <apply executable="java" parallel="false" dest="${minify.dir}/css-min/">
            <fileset dir="${minify.sourcedir}/styles/">
                <include name="**/*.css"/>
            </fileset>
            <arg line="-jar"/>
            <arg path="${lib.dir}/yui_compressor/yuicompressor-2.4.7.jar"/>
            <arg line="--line-break 0"/>
            <arg line="--type css"/>
            <arg line="--charset ISO-8859-1"/>
            <arg line="--nomunge"/>
            <!-- <arg line="- -verbose"/> -->
            <srcfile />
            <arg line="-o"/>
            <mapper type="glob" from="*.css" to="*.css"/>
            <targetfile />
        </apply>
    </target>

    <!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->

    <target name="js.minify">

        <echo message="Creando directorio temporal ${minify.dir} (si no existe aún)..." />
        <mkdir dir="${minify.dir}" />

        <echo message="Borrando versión anterior de la carpeta temporal ${web.dir}/resources/js-min/..." />
        <delete dir="${minify.dir}/js-min/" />
        <echo message="Creando carpeta temporal ${web.dir}/resources/js-min/..." />
        <mkdir dir="${minify.dir}/js-min/" />

        <echo message="Copiando estructura de ${web.dir}/resources/scripts/ en carpeta temporal..." />
        <copy todir="${minify.dir}/js-min/">
            <fileset dir="${minify.sourcedir}/scripts/">
                <include name="**/*.*" />
            </fileset>
        </copy>

        <echo message="Borrando los JS copiados a la carpeta temporal..." />
        <delete>
            <fileset dir="${minify.dir}/js-min/" >
                <include name="**/*.js"/>
            </fileset>
        </delete>

        <echo message="Comprimiendo!!!..." />
        <apply executable="java" parallel="false" dest="${minify.dir}/js-min/">

            <fileset dir="${minify.sourcedir}/scripts">
                <include name="**/*.js"/>
            </fileset>
            <arg line="-jar"/>
            <arg path="${lib.dir}/yui_compressor/yuicompressor-2.4.7.jar"/>
            <arg line="--line-break 0"/>
            <arg line="--type js"/>
            <arg line="--charset ISO-8859-1"/>
            <arg line="--nomunge"/>
            <!--<arg line="- -verbose"/>-->
            <srcfile />
            <arg line="-o"/>
            <mapper type="glob" from="*.js" to="*.js"/>
            <targetfile />
        </apply>

    </target>

    <!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->

    <target name="js.minified.subir" depends="checkTomcatHome" if="local.tomcathome.exists">
        <echo message="El servidor Tomcat destino existe, copiando archivos 'encogidos' a  ${env.TOMCAT_PRUEBAS}/webapps/${project.name}/resources/scripts..." />
        <copy todir="${env.TOMCAT_PRUEBAS}/webapps/${project.name}/resources/scripts" overwrite="yes">
            <fileset dir="${minify.dir}/js-min/">
                <include name="**/*.*" />
            </fileset>
        </copy>
    </target>

    <!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->

    <target name="css.minified.subir" depends="checkTomcatHome" if="local.tomcathome.exists">
        <echo message="El servidor Tomcat destino existe, copiando archivos 'encogidos' a  ${env.TOMCAT_PRUEBAS}/webapps/${project.name}/resources/styles..." />
        <copy todir="${env.TOMCAT_PRUEBAS}/webapps/${project.name}/resources/styles" overwrite="yes">
            <fileset dir="${minify.dir}/css-min/">
                <include name="**/*.*" />
            </fileset>
        </copy>
    </target>

    <!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->

    <target name="css.minified.process">
        <echo message="Reduciendo el tamaño de los archivos CSS..." />
        <antcall target="css.minify" />

        <echo message="Cargando los archivos CSS..." />
        <antcall target="css.minified.subir" />

        <echo message="Borrando la carpeta temporal..." />
        <delete dir="${minify.dir}" />
    </target>

    <!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->

    <target name="js.minified.process">
        <echo message="Reduciendo el tamaño de los archivos JS..." />
        <antcall target="js.minify" />

        <echo message="Cargando los archivos JS..." />
        <antcall target="js.minified.subir" />

        <echo message="Borrando la carpeta temporal..." />
        <delete dir="${minify.dir}" />
    </target>
    <!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->

</project>
person Alfabravo    schedule 14.02.2012
comment
Никогда не слышал об этом, но я изучил это, и это звучит как возможное решение. (en.wikipedia.org/wiki/Apache_Ant). Однако файл выглядит слишком сложным, как будто создание файла сценария python или shellscript было бы одинаково хорошо / утомительно. Но ANT выиграет, если я смогу автоматически создать этот файл, записав свои действия в Eclipse, вроде макроса. Не могли бы вы подробнее рассказать об этом или предоставить ссылку с информацией по этому поводу? - person Redsandro; 15.02.2012
comment
Это может показаться сложным, но задачи довольно простые, с использованием только некоторых основных функций. Ознакомьтесь с документацией Apache ANT и некоторыми другими результатами, такими как vogella.de/articles/ApacheAnt/article. html и www6.software. ibm.com/developerworks/education/j-apant/. AFAIK, задача не может быть записана, поэтому решать вам. - person Alfabravo; 15.02.2012

Вы можете выбирать и «создавать» ресурсы js / css, настраивая и добавляя внешний инструмент с помощью пакета (для пользователей Windows).

Это позволяет минимизировать, просто нажав одну кнопку. (Это не является частью конфигурации запуска.)

Предварительные условия: - Должна быть установлена ​​Java. - Вы должны скачать yuicompressor. (В настоящее время официальная страница загрузки находится здесь: https://github.com/yui/yuicompressor/releases)

Шаг 1: Добавьте в свой проект «yuicompressor» и «minify.bat» (указанные ниже).

введите описание изображения здесь

Шаг 2: Настройте внешний инструмент с именем «Minify» (перейдите в меню «Выполнить» -> «Внешние инструменты» -> «Конфигурации внешних инструментов»).

введите здесь описание изображения  введите описание изображения здесь  введите описание изображения здесь

Шаг 3: Выберите ресурсы (js / css) или каталог, который их содержит, и нажмите «Свернуть». Файлы js / css будут развернуты в одноуровневом каталоге min.

введите описание изображения здесь

(minify.bat)

@echo off

set target=%1
set yui=%2\WebContent\build\yuicompressor\yuicompressor-2.4.8.jar

:: %1 selected resource
:: %2 current project

:: dir
if exist %target%\ (
  cd /d %target%
  mkdir min 2>nul

  for %%f in (*.js *.css) do (
    echo Minifying "%%~ff"
    java -jar %yui% %%f -o min\%%f
  ) 

  goto end
) 

:: .js/.css
set pathNoExt=0
for /f %%i in ('dir /b %target%') do set pathNoExt=%%~ni

if not %pathNoExt%==0 (
  cd /d %~dp1
  mkdir min 2>nul

  for /f %%f in ('dir /b %pathNoExt%.js %pathNoExt%.css') do (
    echo Minifying "%%~ff"
    java -jar %yui% %%f -o min\%%f
  )
)

:end
echo Minified
person megre    schedule 08.12.2018
comment
Примечание: если вы поместите yuicompressor-2.4.8.jar в ту же папку, что и ваш командный файл, вы можете изменить set yui=%2\WebContent\build\yuicompressor\yuicompressor-2.4.8.jar на set yui=yuicompressor-2.4.8.jar Более простой и менее подверженный ошибкам - person RWC; 27.05.2020

Я хотел бы улучшить ответ мегре (https://stackoverflow.com/a/53678752/760777). Его решение работает, но его можно улучшить. Хотя все ему заслуги.

На шаге 2: Измените расположение командного файла на $ {project_loc} \ build \ minify.bat. Поместите свой командный файл «minify.bat» в подпапку «build» в папке вашего проекта. Также измените аргументы с «$ resource_loc $ project_loc» на «$ {project_loc}».

Если это не сработает, попробуйте "$ project_loc". В разных версиях Eclipse используются разные переменные.

Смотрите скриншот:

введите описание изображения здесь

Я полностью изменил командный файл:

@ECHO OFF

REM Note: There is a bug in yuicompressor 2.4.8 causing yuicompressor not te be accessible 
REM       see https://stackoverflow.com/a/19339287/760777

SET yui="C:\Program Files (x86)\yuicompressor\yuicompressor-2.4.7.jar"
SET cssFolder=%1\css
SET jsFolder=%1\js

IF EXIST %cssFolder% (
  ECHO Processing folder "%cssFolder%" ... 
  CD %cssFolder%
  MKDIR min 2>NUL
  FOR %%f IN (*.css) DO (
    ECHO Minifying "%%~ff"
    java -jar %yui% %%f -o min\%%f
  )
) ELSE (
  ECHO %cssFolder% does not exist. Put your css files in a subfolder "css" in the current project folder 
)

IF EXIST %jsFolder% (
  ECHO Processing folder "%jsFolder%" ... 
  CD %jsFolder%
  MKDIR min 2>NUL
  FOR %%f IN (*.js) DO (
    ECHO Minifying "%%~ff"
    java -jar %yui% %%f -o min\%%f
  ) 
) ELSE (
  ECHO %jsFolder% does not exist. Put your js files in a sub folder "js" in the current project folder 
)

Наверное, нет необходимости говорить, но чтобы использовать минифицированные файлы, вы должны соответствующим образом изменить ссылки в ваших файлах HTML / PHP.

person RWC    schedule 27.05.2020

Вы также можете пакетно минифицировать с помощью Node.js. Однако этот вариант доступен только для пользователей Linux (на данный момент).

Каждый раз, когда какому-то программному пакету ужасно не хватает удобства (Eclipse) или когда формат пакета компоновщика просто сумасшедший (ANT), кто-то умный приходит и создает что-то потрясающее.

В таком случае,

что потрясающе.

Просто подумал, что обновлю этот вопрос и добавлю ответ.

person Redsandro    schedule 21.09.2013