Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为java/spring/maven应用程序组合和压缩javascript/css的低调方式?_Java_Javascript_Css_Minify - Fatal编程技术网

为java/spring/maven应用程序组合和压缩javascript/css的低调方式?

为java/spring/maven应用程序组合和压缩javascript/css的低调方式?,java,javascript,css,minify,Java,Javascript,Css,Minify,我想添加一些库,或者maven插件,或者“一些东西”来组合和压缩我的javascript和css源文件 然而,我认为用Java悄悄地做到这一点是相当困难的。Rails的人基本上解决了这个问题。。。它使用未连接/未压缩的文件进行开发,然后在生产过程中压缩所有内容。它以不引人注意的方式实现这一点,因为您不必更改html标题或类似的内容—它适用于测试和生产。这或多或少是我想要的。它甚至存在于Java空间中吗 我最不想做的事情是注释和取消注释freemarker/html代码行,以用于开发和生产—我希望

我想添加一些库,或者maven插件,或者“一些东西”来组合和压缩我的javascript和css源文件

然而,我认为用Java悄悄地做到这一点是相当困难的。Rails的人基本上解决了这个问题。。。它使用未连接/未压缩的文件进行开发,然后在生产过程中压缩所有内容。它以不引人注意的方式实现这一点,因为您不必更改html标题或类似的内容—它适用于测试和生产。这或多或少是我想要的。它甚至存在于Java空间中吗

我最不想做的事情是注释和取消注释freemarker/html代码行,以用于开发和生产—我希望一切都是一样的。理想情况下,我希望能够让Tomcat保持运行,编写javascript和css代码,并立即看到我的更改—没有延迟或停顿。我也不想每次更改时都手动运行命令来生成新的javascript。。。或者让一些守护进程不断地更新它(因为在我测试时,它可能不是即时的)。同时,如果我要打包我的war用于生产,我希望它使用连接和压缩的文件

这可能吗?如果是,我应该使用什么工具?我知道有相当多的人做了一些这样的事情,但他们在“不引人注目”方面做得不够


谢谢

一个对我有效的解决方案是使用
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>