首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >执行jar文件的服务

执行jar文件的服务
EN

Stack Overflow用户
提问于 2016-07-20 10:16:12
回答 1查看 153关注 0票数 1

我们使用闭包编译器jar文件来缩小JS文件。这些JS文件是在客户端单击其设置屏幕上的Save按钮时生成的。

每次对闭包编译器jar文件的调用都需要3-6秒,因为每次调用都会启动一个JVM。太长了,没有什么好的理由.我很乐意让JVM在后台运行,无论是在引导时还是在第一次调用时。

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

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

代码语言:javascript
复制
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()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-20 11:06:55

Gradle

我认为你可以使用Gradle,而不是自己去做。Gradle有一个很好的特性,名为gradle daemon,它是一个长期存在的后台JVM进程,它比其他情况下更快地执行您的构建。

Gradle有闭包编译器插件,所以集成很容易。

代码语言:javascript
复制
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
}

而且您不必在计算机上安装gradle,您可以使用gradle wraper,它将在gradle启动之前下载适当版本的gradle。

滴水

如果不想使用gradle,可以使用滴水。Drip是Java虚拟机的启动程序,它比java命令提供了更快的启动时间。滴漏脚本的目的是替代java命令,只是速度更快。

您可以在您的python脚本中安装drip命令并使用它代替java

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38478481

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档