我想添加某种库,或maven插件,或“东西”来组合和压缩我的javascript和css源文件。
但是,我认为用Java进行不显眼的操作非常困难。 Rails人员已经解决了这个问题......它使用未加入/未压缩的文件进行开发,然后在生产过程中压缩所有内容。它不会引人注目,因为你不必更改你的html标题或类似的东西 - 它适用于测试和生产。这或多或少都是我想要的。它甚至存在于Java空间吗?
我想要的最后一件事是评论和取消注释用于开发和制作的freemarker / html代码行 - 我希望一切都是一样的。理想情况下,我希望能够让Tomcat运行并编写我的javascript和css代码,并立即查看我的更改 - 没有延迟或提升。我也不想在每次进行更改时手动运行命令来生成新的javascript ...或者甚至让一些守护进程不断更新它(因为那时我可能不会立即测试)。与此同时,如果我打算将我的战争打包生产,我希望它能够使用加入和压缩的文件。
这甚至可能吗?如果是这样,我应该看什么工具?我知道有很多人会这样做,但他们在“不显眼”方面做得不够。
由于
答案 0 :(得分:13)
对我有用的解决方案是在构建生产时使用maven-minify-plugin
(groupId为com.samaxes.maven
)但仅。使用构建属性指定您是否处于开发模式。 Link to plugin
你可以拥有这样的东西(我不知道freemarker所以我只是粘贴了一些JSP代码,但我确信它可以轻松转换):
<c:choose>
<c:when test="${developmentMode}">
<link rel="stylesheet" type="text/css" href="<c:url value="/css/custom1.css"/>"/>
<link rel="stylesheet" type="text/css" href="<c:url value="/css/custom2.css"/>"/>
<link rel="stylesheet" type="text/css" href="<c:url value="/css/another1.css"/>"/>
<link rel="stylesheet" type="text/css" href="<c:url value="/css/another2.css"/>"/>
<script type="text/javascript" src="<c:url value="/js/mylibrary.js"/>"></script>
<script type="text/javascript" src="<c:url value="/js/more.js"/>"></script>
<script type="text/javascript" src="<c:url value="/js/util.js"/>"></script>
<script type="text/javascript" src="<c:url value="/js/whatever.js"/>"></script>
<script type="text/javascript" src="<c:url value="/js/more.js"/>"></script>
</c:when>
<c:otherwise>
<link rel="stylesheet" type="text/css" href="<c:url value="/css/minified.css"/>"/>
<script type="text/javascript" src="<c:url value="/js/minified.js"/>"></script>
</c:otherwise>
</c:choose>
这种方式在开发时使用非缩小/组合的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>
答案 1 :(得分:5)
Jawr是一个提供css / js文件压缩和合并的库。它为html include语句提供了一个Tag。 这使得可以使用相同的未修改的JSP页面进行开发(使用未修改的css / js)和生产(合并和缩小)。
wro4j接触相似的功能。
答案 2 :(得分:3)
使用maven-minify-plugin
也为我工作。
但我设法找到一种使用它的方法,而不是使用像c:when
那样的条件标签,将它与maven-war-plugin
结合使用。
此代码段可以原样使用:
首先,首先缩小CSS / JS而不使用后缀(意味着文件保留其名称)
<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>
然后,在构建war文件时,不要覆盖CSS / JS文件(已经通过minify目标在目标中生成)
<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>
然后,内置的战争将包含完全相同的文件但压缩。 (这可能不是执行缩小的最佳方法,但它不会改变开发中的任何内容)
希望这会有所帮助......