Java 执行jar文件的服务

Java 执行jar文件的服务,java,jar,jvm,google-closure-compiler,ubuntu-server,Java,Jar,Jvm,Google Closure Compiler,Ubuntu Server,我们使用闭包编译器jar文件来缩小JS文件。 这些JS文件是在客户端点击设置屏幕上的[Save]按钮时生成的 每次调用闭包编译器jar文件都需要3-6秒,因为每次调用都会启动一个JVM。这太长了,没有什么好理由。。。我很乐意让JVM保持在后台运行,无论是启动还是第一次调用 有没有一种方法可以将JAR文件作为服务或类似的东西从运行中的JVM机器加载?或者是一种“缓存”JVM的方法,以便下次调用jar时,它不会启动新的JVM,而是使用上一个JVM 环境是Ubuntu服务器、Django、Python

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

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

有没有一种方法可以将JAR文件作为服务或类似的东西从运行中的JVM机器加载?或者是一种“缓存”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()
格拉德尔 我认为你可以使用Gradle,而不是自己做。Gradle有一个很好的特性,叫做JVM,这是一个长期存在的后台JVM进程,它执行构建的速度比其他情况下要快得多

Gradle具有闭包,因此可以轻松完成集成

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
}
存储库{
mavenCentral()//或jcenter()
}
配置{
Closure编译器
}
依赖关系{
closureCompiler'com.google.javascript:closureCompiler:v20150609'
}
任务编译器(类型:JavaExec){
classpath configurations.closure编译器
main='com.google.javascript.jscomp.CommandLineRunner'
def closureArgs=[]
//在此处附加所有命令行选项
克洛苏莱格斯格勒酒店
我认为你可以使用Gradle,而不是自己做。Gradle有一个很好的特性,叫做,它是一个长期存在的后台JVM进程,比其他情况下执行构建的速度要快得多

Gradle具有闭包,因此可以轻松完成集成

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
}
存储库{
mavenCentral()//或jcenter()
}
配置{
Closure编译器
}
依赖关系{
closureCompiler'com.google.javascript:closureCompiler:v20150609'
}
任务编译器(类型:JavaExec){
classpath configurations.closure编译器
main='com.google.javascript.jscomp.CommandLineRunner'
def closureArgs=[]
//在此处附加所有命令行选项

closureArgs首先尝试了滴灌,因为集成是一个不需要动脑筋的过程。它在速度上没有任何显著的改进。Gradle说它不适合生产,尤其是在守护进程打开的情况下。你知道为什么吗?@oriadam,你能提供一个与此语句的链接吗?SerCe,这里:@oriadam,我没有找到任何一个“它不适合生产”,它提到“因为不建议使用守护进程进行持续集成构建"因为它会影响构建的可复制性。然而,即使是IntelliJ IDEA也会使用后台程序与Gradle集成。人们也已经成功地尝试了Nailgun的滴灌,因为集成是不需要动脑筋的。它在速度上没有任何显著的改进。Gradle说它不适合生产,特别是ally没有打开daemon。你知道为什么吗?@oriadam,你能提供一个与此语句相关的链接吗?SerCe,这里:@oriadam,我在那里没有发现任何“它不适合生产”的内容。它提到“因为不建议将daemon用于连续集成构建”因为它会影响构建的可复制性。然而,即使是IntelliJ的想法也会在后台使用daemon和Gradle集成。人们在使用Nailgun方面也取得了一些成功