执行jar文件的服务

时间:2016-07-20 10:16:12

标签: java jar jvm google-closure-compiler ubuntu-server

我们正在使用Closure Compiler jar文件来缩小我们的JS文件。 当客户端点击其设置屏幕上的[Save]按钮时,会生成这些JS文件。

对Closure Compiler jar文件的每次调用都需要3-6秒,因为它会在每次调用时启动JVM。这太长了,并且没有充分的理由......我很乐意在启动或第一次调用时保持JVM在后台启动并运行。

有没有办法从正在运行的JVM机器加载JAR文件作为服务,或类似的东西?或者也许是一种“缓存”JVM的方法,以便下次调用jar时,它不会启动新的JVM而是使用前一个JVM?

环境是Ubuntu服务器,Django,Python。 这是调用jar文件的当前代码:

import time, subprocess, random
# run google closure compiler
jarjs = os.path.join(ROOT_DIR, "compiler.jar")
fn_min = fn_max.replace('.js','.min.js')
p = subprocess.Popen(['java','-jar',jarjs,'--jscomp_off','internetExplorerChecks','--compilation_level','SIMPLE_OPTIMIZATIONS','--js',fn_max,'--js_output_file',fn_min], stdout=subprocess.PIPE,stderr=subprocess.PIPE)
out, err = p.communicate()

1 个答案:

答案 0 :(得分:0)

摇篮

我认为您可以使用Gradle而不是自己动手。 Gradle有一个名为gradle daemon的优秀功能,它是一个长期存在的后台JVM进程,可以比其他情况更快地执行构建。

Gradle已关闭compiler plugin,因此可以轻松完成整合。

RGB_565

您不必在您的计算机上安装gradle,您可以使用gradle wraper在开始之前下载适当版本的gradle。

滴灌

如果您不想使用gradle,则可以使用Drip代替。 Drip是Java虚拟机的启动程序,它比java命令提供更快的启动时间。滴滴脚本旨在成为java命令的替代品,只是更快。

您可以在python脚本中安装drip并使用repositories { mavenCentral() //or jcenter() } configurations { closureCompiler } dependencies { closureCompiler 'com.google.javascript:closure-compiler:v20150609' } task compileJS(type: JavaExec){ classpath configurations.closureCompiler main = 'com.google.javascript.jscomp.CommandLineRunner' def closureArgs = [] //append all your command line options here closureArgs << "--compilation_level=SIMPLE_OPTIMIZATIONS" closureArgs << "--js_output_file=app.js" closureArgs << "input1.js" closureArgs << "input2.js" closureArgs << "src/**.js" args closureArgs } 命令代替drip