2017-02-27 82 views
0

我有一個通過gradle變成jar的spring引導項目。Gradle包含來自webapp目錄的Freemarker文件

這是我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

而只是說你好的世界。

每當我通過運行
./gradlew clean jar
建立我的罐子我注意到,在創建罐子page.ftl不存在

當我跑我的春天啓動的應用程序無法找到page.ftl,但是如果我創建一個目錄
webapp\WEB-INF\template\page.ftl
其中罐子位於那麼page.ftl被發現。

如何配置gradle以包含page.ftl並將我的@Configuration類配置爲在那裏查找page.ftl

我曾嘗試加入

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

要我jar任務中的build.gradle,雖然這保證了page.ftl包括在罐子裏,我的應用程序仍然無法找到它的一些原因。

回答

0

src/main/webapp內容僅包含在當它是一個war文件內置歸檔。建造罐子時不包括它們。你已經應用了戰爭插件,所以./gradlew clean war應該工作。如果你想要一場肥胖的戰爭,也就是可以用java -jar運行的戰爭,那麼運行./gradlew clean bootRepackage

相關問題