2011-07-07 5 views
1

私は今晩MSBuildを使い始め、MSBuildにnAntビルドスクリプトを移植しています。コンパイルはかなり簡単ですが、私がやりたいことの1つはディレクトリ内のすべてのファイルに対してJavaプログラムを実行することです。私は最終的にそれを働かせましたが、それはハッキーのようであり、私はこれを行うためのよりクリーンな方法があると確信しています。ここに私のコードは次のとおりです。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" /> 

は、ここで上記のアプローチと私の問題だ:

  • 私はクランチにどこのjava.exe生活を作業ディレクトリを設定する必要があり、にもかかわらずのJava.exeが入っていますシステムのパスとちょうど動作する必要があります。

  • 私は作業ディレクトリを変更するので、ItemGroup内のインクルードファイルは作業ディレクトリからの相対パスではなくなりました。これらのファイルをすべて絶対パスに変換する必要があります。

  • このプログラムは非常に遅く、ファイルごとに数秒かかる。だから私が得るのは、 "スクリプトファイルを危機に瀕している"ということです。そして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> 

誰もが上記のいずれかの問題を修正するための任意の方法を持っている場合、私はそれを大幅にいただければと思います。ありがとう!

+0

私は絶対パスの事の周りに1つの方法を見つけました。 .Identityの代わりに%(ToCrunch.FullPath)を使用すると、すべてのパスを変換する必要はありません。とにかく1つの問題が.. –

答えて

1

私は、完全なパスを与えるIdentityプロパティの代わりにFullPathプロパティを使用してこれを解決しました。

MSBuildがシステムパス内にあってもプログラムが見つからないのはなぜかというと謎です。

また、.NET Port of YUI CompressorにはMSBuildのサポートがあります。これを試してみると、問題はもはや問題になりません。

関連する問題