`
tanyiliang
  • 浏览: 5483 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

使用JAVA实现JS/CSS的文件压缩混淆功能

    博客分类:
  • WEB
阅读更多

应项目需要,采用yuicompressor对js/css文件进行压缩混淆,于是编写了一个java文件,接收参数目前只开放两个,一个为目录(可以是整个项目路径),一个是是否混淆(默认true)。程序会循环目录下所有的js/css文件,已经是min文件的除外,进行压缩之后覆盖原文件,因此一般用于开发完成测试之前做。日志文件会显示出处理的具体文件,以及由于编写不规范导致无法压缩的文件。个人碰到过一个CSS文件,文件末尾多了写了/*!,整个压缩过程就一直停留在这里了。因此使用此工具要求文件编写要规范。

public class JsAndCssZip {

    static Logger logger = Logger.getLogger(JsAndCssZip.class.getName());

    int linebreakpos = -1;// 无断行

    boolean munge = true;// 混淆

    boolean verbose = false;// 显示信息性消息和警告

    boolean preserveAllSemiColons = true; // 保留所有分号

    boolean disableOptimizations = true; // 禁用所有微优化

    public static void main(String[] args) {
        PropertyConfigurator.configure("./src/log4j.properties");
        if (args == null || args.length == 0) {
            logger.error("pls input the file or dir params!");
            return;
        }
        File file = new File(args[0]);
        logger.debug("zip path:" + args[0]);
        if (!file.exists()) {
            logger.error("the file or dir do not exist!");
            return;
        }
        JsAndCssZip inst = new JsAndCssZip();
        if (args.length > 1) {
            inst.munge = args[1].equalsIgnoreCase("false") ? false : true;
        }
        logger.debug("munge:" + inst.munge);
        Date d = new Date();
        logger.debug("start time : " + d);
        try {
            inst.checkFile(file);
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        Date d1 = new Date();
        logger.debug("end time " + d1);
        logger.debug("FINISHED AND COST TIME(ms):" + (d1.getTime() - d.getTime()));
    }

    public void checkFile(File file) throws Exception {
        if (file.getName().endsWith(".svn"))
            return;
        if (file.isFile()) {
            jsZip(file);
            return;
        }
        File[] files = file.listFiles();
        if (files == null || files.length == 0)
            return;
        for (File f : files) {
            if (file.getName().endsWith(".svn"))
                return;
            if (file.isFile()) {
                jsZip(file);
                continue;
            }
            checkFile(f);
        }
    }

    public void jsZip(File file) throws Exception {
        String fileName = file.getName();
        if (fileName.endsWith(".js") == false && fileName.endsWith(".css") == false) {
            return;
        }
        if (fileName.endsWith(".min.js") == true || fileName.endsWith(".min.css") == true) {
            return;
        }
        Reader in = new InputStreamReader(new FileInputStream(file), "utf-8");
        String filePath = file.getAbsolutePath();
        logger.debug("DEAL FILE:" + filePath);
        File tempFile = new File(filePath + ".tempFile");
        Writer out = new OutputStreamWriter(new FileOutputStream(tempFile), "utf-8");
        if (fileName.endsWith(".js")) {
            try {
                JavaScriptCompressor jscompressor = new JavaScriptCompressor(in, new ErrorReporter() {
                    public void warning(String message, String sourceName, int line, String lineSource, int lineOffset) {
                        if (line < 0) {
                            // logger.error("[WARNING] " + message);
                        }
                        else {
                            // logger.error("[WARNING] " + line + ':' + lineOffset + ':' + message);
                        }
                    }

                    public void error(String message, String sourceName, int line, String lineSource, int lineOffset) {
                        if (line < 0) {
                            // logger.error("[ERROR] " + message);
                        }
                        else {
                            // logger.error("[ERROR] " + line + ':' + lineOffset + ':' + message);
                        }
                    }

                    public EvaluatorException runtimeError(String message, String sourceName, int line,
                        String lineSource, int lineOffset) {
                        error(message, sourceName, line, lineSource, lineOffset);
                        return new EvaluatorException(message);
                    }
                });
                jscompressor.compress(out, linebreakpos, munge, verbose, preserveAllSemiColons, disableOptimizations);
            }
            catch (org.mozilla.javascript.EvaluatorException e) {
                logger.error("[ERROR] " + file.getPath());
                out.close();
                in.close();
                tempFile.delete();
                return;
            }

        }
        else if (fileName.endsWith(".css")) {
            CssCompressor csscompressor = new CssCompressor(in);
            csscompressor.compress(out, linebreakpos);
        }

        out.close();
        in.close();
        file.delete();
        tempFile.renameTo(file);
        tempFile.delete();
    }

}

  需依赖yuicompressor.jar。

分享到:
评论

相关推荐

    java开发中压缩js,css文件

    Java中实现js和css压缩,通常会使用一些开源库,例如Google的Closure Compiler和YUI Compressor,它们提供了API供开发者调用。这些工具不仅能够压缩文件,还能进行变量和函数名的混淆,进一步减小文件大小,但混淆...

    基于java的开发源码-JS和CSS压缩混淆 JsCompressor.zip

    基于java的开发源码-JS和CSS压缩混淆 JsCompressor.zip 基于java的开发源码-JS和CSS压缩混淆 JsCompressor.zip 基于java的开发源码-JS和CSS压缩混淆 JsCompressor.zip 基于java的开发源码-JS和CSS压缩混淆 ...

    java源码:JS和CSS压缩混淆 JsCompressor.rar

    Java源码:JS和CSS压缩混淆 JsCompressor 是一个用于优化前端资源的工具,它能够对JavaScript和CSS文件进行压缩和混淆,以提高网页加载速度并保护代码安全。这个工具的核心在于减小文件大小,降低网络传输的时间,...

    基于Java的JS和CSS压缩混淆 JsCompressor.zip

    "基于Java的JS和CSS压缩混淆 JsCompressor.zip" 提供了一种解决方案,帮助开发者有效地处理这两种资源,以提升网页加载速度和安全性。 JavaScript是Web应用的核心,它负责处理动态交互和功能实现。然而,未经压缩的...

    基于java的JS和CSS压缩混淆 JsCompressor.zip

    这里我们关注的是一个名为"基于java的JS和CSS压缩混淆 JsCompressor.zip"的工具,它显然是一个使用Java编写的程序,用于实现这个目的。下面我们将深入探讨JS和CSS压缩混淆的概念、原理以及它们为何对提升网站性能至...

    JAVA源码JS和CSS压缩混淆JsCompressor

    JAVA源码JS和CSS压缩混淆JsCompressor

    基于Java的源码-JS和CSS压缩混淆 JsCompressor.zip

    这个名为"JS和CSS压缩混淆 JsCompressor.zip"的压缩包文件提供了基于Java的源码,帮助开发者实现这一目标。 JavaScript和CSS压缩的主要目的是减少文件大小,从而加快网页加载速度。当用户访问网站时,浏览器需要...

    java资源JS和CSS压缩混淆 JsCompressor

    java资源JS和CSS压缩混淆 JsCompressor提取方式是百度网盘分享地址

    yui compressor 2.4.2 javascript/css压缩程序

    `YUI Compressor` 的主要功能是对JavaScript和CSS文件进行压缩,去除代码中的空白、注释和不必要的字符。它使用了高效的代码混淆算法,将变量名替换为简短的单字母形式,进一步减小文件体积。同时,对于CSS,它还会...

    基于Java的实例源码-JS和CSS压缩混淆 JsCompressor.zip

    本实例源码"JS和CSS压缩混淆 JsCompressor.zip"提供了基于Java实现的工具,用于帮助开发者有效地处理这两种文件,提升网页加载速度并增强代码安全性。 首先,我们来探讨一下JavaScript和CSS压缩的重要性。当用户...

    基于Java的实例开发源码-JS和CSS压缩混淆 JsCompressor.zip

    本文将深入探讨基于Java实现的JS和CSS压缩混淆工具——JsCompressor的相关知识点。 首先,我们理解一下JavaScript和CSS压缩的必要性。在网页开发中,未压缩的JS和CSS文件往往体积较大,包含了许多空格、注释和换行...

    web代码混淆方案.混淆js代码,压缩css代码

    CSS压缩则是通过删除不必要的空格、换行和注释,以及合并重复的选择器来减小文件大小。例如,WRO4J是一个自动化资源管理工具,它可以将多个CSS文件合并为一个,并进行压缩。这样可以减少HTTP请求的数量,提高页面...

    maven打包使用yui压缩css和js文件

    Maven作为一个强大的Java项目管理工具,提供了与各种构建优化工具集成的能力,其中包括使用YUI Compressor来压缩CSS和JS文件。YUI Compressor是一款由Yahoo开发的开源工具,它能够去除代码中的空白、注释,并进行...

    利用yuicompressor来对js、css文件压缩

    )开发的一款高效的JavaScript和CSS压缩工具。它通过删除不必要的空格、换行符和注释,以及对变量和函数名进行混淆,有效地减小了文件的大小,从而加快了网页的加载速度。同时,YUI Compressor还提供了CSS的合并功能...

    JAVA批量压缩JS

    本篇文章将深入探讨“JAVA批量压缩JS”的主题,以及如何利用工具或自定义程序来实现对JavaScript和CSS的压缩,从而提高网页加载速度和整体性能。 一、JavaScript与CSS压缩的重要性 1. 减少文件大小:未压缩的JS和...

    压缩CSS/JS等文件的工具

    标题中的"压缩CSS/JS等文件的工具"指的是一类能够对样式表(CSS)和脚本(JS)文件进行压缩的软件或在线服务,它们的主要目标是减少文件大小,从而缩短网页的加载时间。 压缩CSS文件主要是通过删除不必要的空格、换...

    使用Ant构建批量压缩js、css文件脚本

    YUI Compressor是由Yahoo开发的一款高效的JavaScript和CSS压缩工具,它可以删除代码中的空格、注释,并进行变量和函数名的混淆,从而达到压缩的目的。 以下是使用Ant和YUI Compressor进行批量压缩的基本步骤: 1. ...

    JS CSS压缩工具

    为了提高网站性能,开发者通常会使用“JS CSS压缩工具”来减小文件大小,从而加快网页加载速度。 JS压缩工具的主要功能是去除代码中的空白、注释和换行,同时进行变量名混淆,使得源代码更加紧凑。这样的过程称为...

    YUI+Ant 实现JS CSS压缩

    标题:“YUI+Ant 实现JS CSS压缩” 在Web开发中,为了提高页面加载速度和优化用户体验,开发者通常会使用代码压缩工具来减少JavaScript(JS)和CSS文件的大小。YUI Compressor是 Yahoo! 推出的一款开源的压缩工具,...

    js css eclipse压缩插件

    安装该插件后,您只需选中包含需压缩文件的上级目录,然后执行 "compress javascript" 命令,插件就会自动处理所有相关的 JavaScript 和 CSS 文件,将其压缩成更小的尺寸,同时保持原有的功能不受影响。 压缩的主要...

Global site tag (gtag.js) - Google Analytics