Gradle Заменить текст в JSP с помощью фильтра - PullRequest
9 голосов
/ 22 марта 2011

У меня есть JSP, который содержит ссылку CSS, которая выглядит как

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

Чтобы браузеры не кэшировали файл css, мы заменили login-min.css именем css и отметкой времени или номером версии

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 1.0-milestone-1.

Спасибо

Ответы [ 5 ]

10 голосов
/ 25 марта 2011

Хорошо, похоже, это работает:

jsp page :

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

build.gradle :

war {
   filter(ReplaceTokens, tokens: ['loginCSS': 'login-min.css'])
}
5 голосов
/ 26 сентября 2011

Еще один вариант, чтобы попробовать (в моем случае это работает, чтобы преодолеть эту ошибку http://issues.gradle.org/browse/GRADLE-1566#)

war {   
   eachFile {
      if (it.name == 'yourFile.jsp') {
        it.filter(org.apache.tools.ant.filters.ReplaceTokens, tokens: [...])
      }
   }
}
4 голосов
/ 23 марта 2011

Не уверен, что это соответствует стилю groovy / gradle, вот как мне удалось это сделать.

jsp файл теперь выглядит так:

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

и gradle.построить так:

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()}")
    }
  }
}

Редактировать - как Аксель указывает ниже в комментариях, это решение имеет проблемы, когда оно работает с двоичными файламиили файлы с выражениями JSP EL.

0 голосов
/ 05 декабря 2017

Вы также можете установить кодировку (потому что по умолчанию это изменит кодировку файла):

war {
    filteringCharset = 'UTF-8'
    filesMatching( '**/*.jsp' ) {
        filter ReplaceTokens, tokens: [
                'versionDate': "${new Date().format('yyyyMMdd')}".toString(),
                'copyright'  : "${new Date().format('yyyy')}".toString()
        ]
    }
}
0 голосов
/ 23 марта 2011

Мы сделали похожие (но не совсем одинаковые) вещи, просто создав java.io.File s и манипулируя ими, затем включив их в .war, используя from{} или webInf{} с fileTree.

Вы можете посмотреть что-то в этом роде, но, поскольку, кажется, это хорошо обрабатывается муравьем, вы рассматривали использование муравья напрямую из gradle , как это ?

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