Отличный вопрос, отличный ответ от artbristol, за который я проголосовал.Это мне очень помогло.Для дальнейшего использования я выложу полное решение:
- Поместите ваши файлы Javascript в
src/main/resources/js
(или что-то, что вам нужно) - Поместите ваши CSS-файлы в
src/main/resources/css
(или что-то ещесоответствует вашим потребностям) - Плагин ресурсов фильтрует ваши ресурсы javascript и копирует их в
target/classes/js/
- Юи подбирает файлы в target / classes / js / и объединяет их в
src/main/webapp
- Вы можете проверить настройки с помощью
jetty:run
.Jetty выбирает сжатые и агрегированные файлы в src/main/webapp
- . Военный плагин на фазе пакета выбирает ваши файлы под
src/main/webapp
- , опционально, вставьте файл игнорирования SCM, например
.svnignore
или.cvsignore
файл в src/main/webapp
для исключения all.js
из вашего любимого инструмента SCM.
Раздел исключений необходим, чтобы не сжимать что-либо в src / main / resources и src / main / webapp.yui должен просто забрать уже отфильтрованные файлы для агрегации.
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>yuicompressor-maven-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<goals>
<goal>compress</goal>
</goals>
</execution>
</executions>
<configuration>
<excludes>
<exclude>*/*</exclude>
</excludes>
<force>true</force>
<nosuffix>true</nosuffix>
<removeIncluded>true</removeIncluded>
<aggregations>
<aggregation>
<insertNewLine>true</insertNewLine>
<output>${project.basedir}/src/main/webapp/js/all.js</output>
<includes>
<include>${project.build.directory}/classes/js/file1.js</include>
<include>${project.build.directory}/classes/js/file2.js</include>
</aggregation>
<aggregation>
<insertNewLine>true</insertNewLine>
<output>${project.basedir}/src/main/webapp/css/all.css</output>
<includes>
<include>${project.build.directory}/classes/css/file1.css</include>
<include>${project.build.directory}/classes/css/file2.css</include>
</aggregation>
</aggregations>
</configuration>
</plugin>
Зачем вам фильтрация CSS-файлов?
Я использую его для ссылки на мои изображения, как это
div.header {
background-image: url(/img/background.${project.version}.png)
}
Maven фильтрует мою версию проекта в мои CSS-файлы.Любой входящий запрос на наш сервер изображений фильтруется , как , это
protected void doHttpFilter ( HttpServletRequest request, HttpServletResponse response, FilterChain chain ) throws IOException, ServletException
{
String uri = request.getRequestURI();
if (isStaticRequest(uri))
{
String uriWithoutVersion = stripVersionString(uri);
String versionRequested = getVersionString(uri);
if (version.equals(versionRequested))
{
response.setHeader(CACHE_CONTROL_HEADER_NAME, CACHE_CONTROL_HEADER_VALUE);
response.setHeader(EXPIRES_HEADER_NAME, EXPIRES_HEADER_VALUE);
}
RequestDispatcher dispatcher = request.getRequestDispatcher(uriOhneVersionsnummer);
dispatcher.forward(request, response);
} else {
chain.doFilter(request, response);
return;
}
}
, таким образом, браузер кэширует каждый файл навсегда.но когда я загружаю новую версию, все ссылки на файлы имеют новый номер версии, поэтому браузер снова загружает изображение или css.это очень помогло нам сократить трафик.