MSBuild - запуск программы на Java для каждого файла является каталогом - PullRequest
1 голос
/ 07 июля 2011

Я только что начал играть с MSBuild этим вечером и портирую скрипт сборки nAnt на MSBuild. Компиляция кажется довольно простой, но я хочу запустить Java-программу для каждого файла в каталоге. Я наконец-то начал работать, но это кажется хакерским, и я совершенно уверен, что есть более чистый способ сделать это. Вот мой код:

<!-- Crunch Files -->
<ItemGroup>
   <ToCrunch Include="$(BuildDir)/WWW/Scripts/kpc*.js;$(BuildDir)/WWW/Styles/*.css" />
</ItemGroup>
<ConvertToAbsolutePath Paths="@(ToCrunch)">
  <Output TaskParameter="AbsolutePaths" ItemName="AbsoluteFiles" />
</ConvertToAbsolutePath>

<Message Text="Crunching Script Files..." />
<Exec WorkingDirectory="Crunch" Command="Java.exe -jar yuicompressor-2.4.2.jar %(AbsoluteFiles.Identity) -o %(AbsoluteFiles.Identity) --charset utf-8" />

Вот мои проблемы с вышеуказанным подходом:

  • Мне нужно установить рабочий каталог на Crunch , где живет java.exe, ДАЖЕ, ЧЕМ Java.exe находится в системном пути и должен работать.

  • Поскольку я меняю рабочий каталог, включенные файлы в ItemGroup больше не относятся к рабочему каталогу, поэтому теперь мне нужно преобразовать их все в их абсолютные пути.

  • Эта программа очень медленная и занимает несколько секунд на файл. Итак, что я получаю, это "Crunching files script" и затем 20-секундная задержка или около того. Я хотел бы вывести на экран сообщение для каждого обрабатываемого файла.

Вот то же самое в nAnt:

      <!-- Crunch Javascript/CSS Files -->
  <foreach item="File" property="filename">
     <in>
        <items>
           <include name="${build.dir}/WWW/Scripts/kpc*.js" />
           <include name="${build.dir}/WWW/Styles/*.css" />
        </items>
     </in>
     <do>
        <echo message="Crunching File ${filename}" />
        <exec program="Crunch/java">
           <arg value="-jar" />
           <arg value="Crunch/yuicompressor-2.4.2.jar" />
           <arg file="${filename}" />
           <arg value="-o" />
           <arg file="${filename}" />
           <arg line="--charset utf-8" />
        </exec>
     </do>
  </foreach>

Если у кого-то есть какие-либо способы исправить любую из вышеперечисленных проблем, я был бы очень признателен. Спасибо!

1 Ответ

1 голос
/ 10 ноября 2011

Я решил эту проблему, используя свойство FullPath вместо свойства Identity, которое дает полный путь.

Почему MSBuild не находит программы, даже если они находятся в системном пути, остается загадкой.

Кроме того, есть порт .NET YUI Compressor с поддержкой MSBuild - я планирую попробовать это, что сделает проблему более неактуальной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...