9

私は次のようなcssリンクを含むjspを持っています

<link type="text/css" href="/css/login-min.css" rel="stylesheet" />

ブラウザがcssファイルをキャッシュしないようにするために、login-min.csscssの名前とタイムスタンプまたはバージョン番号に置き換えます

login-min.css?t=432432423423...

アリでは私は次のようなことをします

<tstamp>
  <format property="current.time" pattern="MMddyyyyhhmmssaa" offset="-5" unit="hour" />
</tstamp>

<replace dir="${deploy.path}/${name}/WEB-INF/jsp" value="login-min.css?t=${current.time}">
  <include name="includes/login_css_include.jsp" />
  <replacetoken>login-min.css</replacetoken>
</replace>

gradleの場合、jspページを次のように更新しました

<link type="text/css" href="/css/@loginCSS@" rel="stylesheet" />

そしてbuild.gradleでやっています

import org.apache.tools.ant.filters.ReplaceTokens
war {
  webInf {
    from ("${webAppDir}/WEB-INF/jsp") {
      include: "/includes/login_css_include.jsp"
      filter(ReplaceTokens, tokens: [loginCSS: 'login-min.css?v=1'])
    }
  }
}

しかし、これは機能していません。

これは機能しますが、ソースが変更されます...戦争中のファイルを変更したいだけです。

import org.apache.tools.ant.filters.ReplaceTokens
war {
  webInf {
    from ("${webAppDir}/WEB-INF/jsp/includes/login_css_include.jsp") {
      it.eachFile {
        ant.replace(file: it.file, token: "@loginCSS@", value: "login-min.css?v=1")
      }
    }
  }
}

私はgradleを初めて使用しますが、これについてはまったく間違っていますか?誰かが前にこのようなことをする必要がありましたか?Gradle1.0マイルストーン-1を使用します。

ありがとう

4

5 に答える 5

10

わかりました、これはうまくいくようです:

jspページ

<link type="text/css" href="/css/@loginCSS@" rel="stylesheet" />

build.gradle

war {
   filter(ReplaceTokens, tokens: ['loginCSS': 'login-min.css'])
}
于 2011-03-25T16:48:52.450 に答える
5

試してみるさらに別のバリアント(私の場合、このバグを克服するために機能します http://issues.gradle.org/browse/GRADLE-1566#

war {   
   eachFile {
      if (it.name == 'yourFile.jsp') {
        it.filter(org.apache.tools.ant.filters.ReplaceTokens, tokens: [...])
      }
   }
}
于 2011-09-26T08:33:47.697 に答える
4

これがgroovy/gradleスタイルに適合するかどうかはわかりませんが、これが私がこれを達成できた方法です.

jsp ファイルは次のようになります。

<link type="text/css" href="/css/${loginCSS}" rel="stylesheet" />

gradle.build は次のようになります。

war {
  eachFile {
    if (it.name == 'login_css_include.jsp') {
      it.expand(loginCSS: "login-min.css?v=1")
    }
  }
}

タイムスタンプを利用すると、次のようになります。

war {
  eachFile {
    if (it.name == 'login_css_include.jsp') {
      def now = new Date()
      it.expand(loginCSS: "login-min.css?t=${now.getTime()}")
    }
  }
}

編集 - 以下のコメントで Axel が指摘しているように、このソリューションは、バイナリ ファイルまたは JSP EL 式を含むファイルで実行すると問題が発生します。

于 2011-03-23T02:33:09.113 に答える
0

を作成して操作し、またはをjava.io.File使用して .war に含めるだけで、同様の (ただしまったく同じではない) ことを行いました。from{}webInf{}fileTree

あなたはそのようなことを調べることができますが、これはantによってかなりうまく処理されているように見えるので、このようにgradleから直接antを使用することを調べましたか?

于 2011-03-23T16:58:48.723 に答える