为java/spring/maven应用程序组合和压缩javascript/css的低调方式?
我想添加一些库,或者maven插件,或者“一些东西”来组合和压缩我的javascript和css源文件 然而,我认为用Java悄悄地做到这一点是相当困难的。Rails的人基本上解决了这个问题。。。它使用未连接/未压缩的文件进行开发,然后在生产过程中压缩所有内容。它以不引人注意的方式实现这一点,因为您不必更改html标题或类似的内容—它适用于测试和生产。这或多或少是我想要的。它甚至存在于Java空间中吗 我最不想做的事情是注释和取消注释freemarker/html代码行,以用于开发和生产—我希望一切都是一样的。理想情况下,我希望能够让Tomcat保持运行,编写javascript和css代码,并立即看到我的更改—没有延迟或停顿。我也不想每次更改时都手动运行命令来生成新的javascript。。。或者让一些守护进程不断地更新它(因为在我测试时,它可能不是即时的)。同时,如果我要打包我的war用于生产,我希望它使用连接和压缩的文件 这可能吗?如果是,我应该使用什么工具?我知道有相当多的人做了一些这样的事情,但他们在“不引人注目”方面做得不够为java/spring/maven应用程序组合和压缩javascript/css的低调方式?,java,javascript,css,minify,Java,Javascript,Css,Minify,我想添加一些库,或者maven插件,或者“一些东西”来组合和压缩我的javascript和css源文件 然而,我认为用Java悄悄地做到这一点是相当困难的。Rails的人基本上解决了这个问题。。。它使用未连接/未压缩的文件进行开发,然后在生产过程中压缩所有内容。它以不引人注意的方式实现这一点,因为您不必更改html标题或类似的内容—它适用于测试和生产。这或多或少是我想要的。它甚至存在于Java空间中吗 我最不想做的事情是注释和取消注释freemarker/html代码行,以用于开发和生产—我希望
谢谢一个对我有效的解决方案是使用
maven minify插件
(groupId是com.samaxes.maven
),但仅在为生产构建时使用。使用生成属性指定是否处于开发模式
然后,您可以有这样的东西(我不知道freemarker,所以我只是粘贴一些JSP代码,但我相信它可以很容易地转换):
这种方式在开发时使用非小型化/组合JS/css,而小型化css仅在为生产构建时使用
编辑:根据要求,以下是在ServletContext上公开Spring定义的bean的代码:
<bean class="org.springframework.web.context.support.ServletContextAttributeExporter">
<property name="attributes">
<map>
<!-- Obviously this can be changed to read from properties file -->
<entry key="developmentMode" value="false" />
</map>
</property>
</bean>
是一个提供css/js文件压缩和合并的库。它为html包含语句提供了一个标记。
这使得在开发(使用未修改的css/js)和生产(合并和缩小)中使用相同的未修改的JSP页面成为可能
与类似功能的接缝。使用
maven minify插件
对我也很有效
但我设法找到了一种比使用条件标记(如c:when
)更不具侵入性的方法,将它与maven-war插件相结合
此代码段可以按原样使用:
首先,从缩小CSS/JS开始,不使用后缀(意味着文件保留其名称)
com.samaxes.maven
缩小maven插件
1.7.2
默认缩小
准备包装
UTF-8
真的
真的
css
*.css
js
*.js
缩小
然后,在构建war文件时,不要覆盖CSS/JS文件(minify目标已经在目标中生成了这些文件)
org.apache.maven.plugins
maven战争插件
2.4
**/*.css,***.js
构建的war将包含完全相同但经过压缩的文件。
(这可能不是执行缩小的最佳方式,但它不会改变开发中的任何内容)
希望这有助于…那么我是否有一个spring mvc拦截器,它以开发模式
变量传递给所有控制器视图?这是唯一的办法吗?有什么。。。我不知道。。。工业实力增强一点?我将有至少50个javascript文件。。。可能是100-150。我认为没有必要安装拦截器。我使用org.springframework.web.context.support.ServletContextAttributeExporter
将Spring定义的对象公开为SerletContext属性。啊,我不知道你实际上可以这么做。你能剪切/粘贴你必须启用的代码吗?用ServletContextAttributeExporter
的bean定义更新问题。
<bean class="org.springframework.web.context.support.ServletContextAttributeExporter">
<property name="attributes">
<map>
<!-- Obviously this can be changed to read from properties file -->
<entry key="developmentMode" value="false" />
</map>
</property>
</bean>
<plugin>
<groupId>com.samaxes.maven</groupId>
<artifactId>minify-maven-plugin</artifactId>
<version>1.7.2</version>
<executions>
<execution>
<id>default-minify</id>
<phase>prepare-package</phase>
<configuration>
<charset>UTF-8</charset>
<skipMerge>true</skipMerge> <!-- do not create one big file -->
<nosuffix>true</nosuffix> <!-- do not use suffix like 'min' -->
<cssSourceDir>css</cssSourceDir>
<cssSourceIncludes>
<cssSourceInclude>*.css</cssSourceInclude>
</cssSourceIncludes>
<jsSourceDir>js</jsSourceDir>
<jsSourceIncludes>
<jsSourceInclude>*.js</jsSourceInclude>
</jsSourceIncludes>
</configuration>
<goals>
<goal>minify</goal>
</goals>
</execution>
</executions>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<configuration>
<!-- in order to use minify filed listed bellow -->
<warSourceExcludes>**/*.css, **/*.js</warSourceExcludes>
</configuration>
</plugin>