Java 使用Gradle/Gretty中的就地web应用程序和资产管道快速重新加载

Java 使用Gradle/Gretty中的就地web应用程序和资产管道快速重新加载,java,gradle,gretty,Java,Gradle,Gretty,我正在使用Gretty通过gradle appRun运行我的web应用程序。我也用它把我的Less文件编译成CSS 我想与集成,这样当我更改较少的文件时,它会自动编译该文件并将CSS复制到就地web应用程序 我在我的build.gradle文件中使用Gretty的onScanFilesChanged设置实现了一个解决方案: buildscript { dependencies { classpath 'org.akhikhl.gretty:gretty:1.2.4'

我正在使用Gretty通过
gradle appRun
运行我的web应用程序。我也用它把我的Less文件编译成CSS

我想与集成,这样当我更改较少的文件时,它会自动编译该文件并将CSS复制到就地web应用程序

我在我的
build.gradle
文件中使用Gretty的
onScanFilesChanged
设置实现了一个解决方案:

buildscript {
    dependencies {
        classpath 'org.akhikhl.gretty:gretty:1.2.4'
        classpath 'com.bertramlabs.plugins:asset-pipeline-gradle:2.7.0'
        classpath 'com.bertramlabs.plugins:less-asset-pipeline:2.7.0'
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'war'
apply plugin: 'org.akhikhl.gretty'
apply plugin: 'com.bertramlabs.asset-pipeline'

dependencies {
    // ...
}

assets {
    excludes = ['bootstrap/**']
}

war.dependsOn assetCompile

gretty {
    servletContainer = 'tomcat8'
    enableNaming = true
    contextPath = '/'

    // This affects the war task as well
    webappCopy {
        from 'build/assets', { into 'stylesheet' }
    }

    afterEvaluate {
        prepareInplaceWebAppFolder.dependsOn assetCompile
    }

    scanDir "src/assets"
    fastReload "src/assets"
    onScanFilesChanged { List<String> files ->
        if (files.findAll { it.endsWith ".less" }.size() > 0) {
            assetCompile.compile()
        }
    } 
}
buildscript{
依赖关系{
类路径'org.akhikhl.gretty:gretty:1.2.4'
类路径'com.bertramlabs.plugins:asset pipeline gradle:2.7.0'
类路径'com.bertramlabs.plugins:更少的资产管道:2.7.0'
}
}
应用插件:“java”
应用插件:“eclipse”
应用插件:“战争”
应用插件:“org.akhikhl.gretty”
应用插件:“com.bertramlabs.asset pipeline”
依赖关系{
// ...
}
资产{
排除=['bootstrap/**']
}
war.dependsOn资产编译器
格雷蒂{
servletContainer='tomcat8'
enableNaming=true
contextPath='/'
//这也影响了战争任务
webappCopy{
从“构建/资产”{到“样式表”}
}
后评价{
prepareInplaceWebAppFolder.dependsOn资产编译
}
scanDir“src/资产”
快速重新加载“src/资产”
onScanFilesChanged{列出文件->
if(files.findAll{it.endsWith.less”}.size()>0){
assetCompile.compile()
}
} 
}

有没有一种更简洁的方法可以做到这一点,而不需要在
build.gradle
文件中包含太多代码?

您描述的行为是Gretty默认的行为。各国:

快速重新加载:当设置为true(默认值)时,webAppDir文件夹(通常为src/main/webapp)被设置为快速重新加载。这意味着:无论何时 webAppDir中的某些文件已更改,这些文件将复制到 在不重新启动web应用的情况下运行web应用

意味着,
src/main/webapp
子目录中的任何更改都将触发Gretty的快速重新加载,但在此目录之外进行的任何更改都会触发服务器重新启动

解决问题的更明智方法是将
gradle assetcompile
的输出路径覆盖到
src/main/webapp
的子目录,或者像在build.gradle文件中那样将复制任务挂接到该子目录:

task copyAssets(type: Copy) {
    from buildDir + '/assets'
    into webAppDir + '/stylesheet'
}

copyAssets.shouldRunAfter assetsCompile

您描述的行为是Gretty默认的行为。各国:

快速重新加载:当设置为true(默认值)时,webAppDir文件夹(通常为src/main/webapp)被设置为快速重新加载。这意味着:无论何时 webAppDir中的某些文件已更改,这些文件将复制到 在不重新启动web应用的情况下运行web应用

意味着,
src/main/webapp
子目录中的任何更改都将触发Gretty的快速重新加载,但在此目录之外进行的任何更改都会触发服务器重新启动

解决问题的更明智方法是将
gradle assetcompile
的输出路径覆盖到
src/main/webapp
的子目录,或者像在build.gradle文件中那样将复制任务挂接到该子目录:

task copyAssets(type: Copy) {
    from buildDir + '/assets'
    into webAppDir + '/stylesheet'
}

copyAssets.shouldRunAfter assetsCompile