繁体   English   中英

Gradle包含来自Webapp目录的Freemarker文件

[英]Gradle include Freemarker files from webapp directory

我有一个Spring Boot项目,通过gradle变成了jar。

这是我的build.gradle

apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'jetty'
apply plugin: 'war'
apply plugin: 'org.springframework.boot'

repositories {
    mavenCentral()
}

dependencies {
    compile("org.springframework.boot:spring-boot-starter-web:1.5.1.RELEASE") {
        exclude module: "spring-boot-starter-tomcat"
    }
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-jetty', version: '1.5.1.RELEASE'
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-actuator', version: '1.5.1.RELEASE'
    compile group: 'org.springframework', name: 'spring-webmvc', version: '4.3.6.RELEASE'
    compile group: 'org.springframework', name: 'spring-context-support', version: '4.3.6.RELEASE'
    compile group: 'org.springframework', name: 'spring-orm', version: '4.3.6.RELEASE'
    compile group: 'javax.servlet', name: 'javax.servlet-api', version: '3.1.0'
    compile group: 'org.freemarker', name: 'freemarker', version: '2.3.23'
    compile group: 'mysql', name: 'mysql-connector-java', version: '6.0.5'
    compile group: 'org.hibernate', name: 'hibernate-core', version: '5.1.4.Final'
    compile group: 'commons-validator', name: 'commons-validator', version: '1.5.1'
    compile group: 'junit', name: 'junit', version: '4.12'
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-test', version: '1.5.1.RELEASE'
}

task wrapper(type: Wrapper) {
    gradleVersion = '2.2'
}

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:1.5.1.RELEASE")
    }
}

jar {
    from {
        (configurations.runtime).collect {
            it.isDirectory() ? it : zipTree(it)
        }
    }
    baseName = 'carefree-cooking'
    version = '0.1.0'
    manifest {
        attributes 'Main-Class': 'carefree.cooking.Application'
    }
}

springBoot {
    executable = true
}

sourceCompatibility = 1.8
targetCompatibility = 1.8

在我的@Configuration我以以下方式配置了Freemarker

@Bean(name = "freemarkerConfig")
public FreeMarkerConfigurer freemarkerConfig()
{
    FreeMarkerConfigurer configurer = new FreeMarkerConfigurer();
    configurer.setTemplateLoaderPath("/");
    return configurer;
}

@Bean(name = "viewResolver")
public FreeMarkerViewResolver viewResolver()
{
    FreeMarkerViewResolver viewResolver = new FreeMarkerViewResolver();
    viewResolver.setPrefix("/WEB-INF/template/");
    viewResolver.setSuffix(".ftl");
    return viewResolver;
}

我的控制器是

@Controller
@RequestMapping("/")
public class IndexController
{
    @RequestMapping()
    public String index(ModelMap model)
    {
        return "page";
    }
}

我的page.ftl位于

src\\main\\webapp\\WEB-INF\\template\\page.ftl

并说“ Hello world”。

每当我通过运行来建立我的罐子
./gradlew clean jar
我注意到在创建的jar page.ftl中不存在

当我运行spring boot应用程序时,找不到page.ftl ,但是如果我创建目录
webapp\\WEB-INF\\template\\page.ftl
jar所在的位置,然后找到page.ftl

如何配置gradle以包括page.ftl并配置我的@Configuration类以在其中查找page.ftl

我尝试添加

from("${projectDir}/src/main") {
    include('webapp/WEB-INF/**')
}

对于build.gradle中的jar任务,尽管这确保了jar中包含page.ftl ,但由于某些原因,我的应用程序仍然找不到它。

src/main/webapp的内容仅在是war文件时才包含在内置存档中。 建造罐子时不包括它们。 您已经应用了war插件,因此./gradlew clean war应该可以工作。 如果您想发动一场激烈的战争,即可以使用java -jar运行的战争,请运行./gradlew clean bootRepackage

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM