2017-09-16 149 views
1

我正在学习使用spring引导和java构建web应用程序。当我通过Spring Tool Suite运行它时,我的应用程序工作正常,但在使用bootRepackage生成可执行文件并运行它之后,它无法解析freemarker视图。Spring引导可执行文件jar无法解析freemarker模板

我不确定有什么问题。任何帮助,将不胜感激。

以下是我对FreeMarker的相关application.properties,

spring.http.encoding.charset=UTF-8 
spring.freemarker.cache=false 
spring.freemarker.charset=utf-8 
spring.freemarker.check-template-location=true 
spring.freemarker.content-type=text/html 
spring.freemarker.enabled=true 
spring.freemarker.suffix=.html 
spring.freemarker.template-loader-path=classpath:/templates/,classpath:/templates/web/ 

我的罐子结构,

BOOT-INF 
    classes 
     com 
     scss 
     static 
     templates 
      web 
       story.html 
      app 
     application.properties 
     log4j2.xml 
META-INF 
org 

我的控制器,

@Controller 
public class HomeController { 

     @Autowired 
     private AppLog appLogger; 

     @RequestMapping("/") 
     public ModelAndView Index(HttpServletRequest request) { 
      appLogger.log(Level.ERROR,AppLogSource.Web, "Reached Controller", null); 
      String testAttribute = request.getAttribute("com.demo.test").toString(); 
      Map<String, String> vm = new HashMap<String, String>(); 
      vm.put("testAttribute", testAttribute); 
      return new ModelAndView("/web/story", vm); 
     } 
} 

我核实,我打的日志所以我认为问题在于解决观点,但我可能错了,错过了其他的东西。所以让我知道你是否需要更多信息。

再次感谢!

最佳, Mrunal

编辑 摇篮文件,

buildscript { 
    ext { 
     springBootVersion = '1.4.1.RELEASE' 
    } 
    repositories { 
     mavenCentral() 
     maven { 
      url "https://plugins.gradle.org/m2/" 
     } 
    } 
    dependencies { 
     classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") 
     classpath("com.moowork.gradle:gradle-node-plugin:1.2.0") 
    } 
} 

apply plugin: 'java' 
apply plugin: 'eclipse' 
apply plugin: 'spring-boot' 
apply plugin: 'com.moowork.node' 
apply plugin: 'com.moowork.grunt' 

jar { 
    baseName = 'testDemo' 
    version = '0.0.1' 
} 

sourceCompatibility = 1.8 
targetCompatibility = 1.8 

repositories { 
    mavenCentral() 
} 

node { 
    version = '6.11.3' 
    npmVersion = '3.10.10' 
    download = true 
} 

task gruntMinifyJs(type: GruntTask){ 
    args=['minifyJs', '--debug'] 
} 

task gruntMinifyCss(type: GruntTask){ 
    args=['minifyCss', '--debug'] 
} 

task buildFrontEnd(type: GruntTask) { 
    args = ['default', '--debug'] 
} 

npmInstall.dependsOn(nodeSetup) 
buildFrontEnd.dependsOn(npmInstall) 
gruntMinifyCss.dependsOn(npmInstall) 
gruntMinifyJs.dependsOn(npmInstall) 
build.dependsOn(buildFrontEnd) 

configurations { 
all*.exclude group: 'ch.qos.logback', module:'logback-classic' 
all*.exclude group: 'ch.qos.logback', module:'logback-core' 
} 

dependencies { 
    compile('org.springframework.boot:spring-boot-devtools') 
    compile('org.springframework.boot:spring-boot-starter-freemarker') 
    compile('org.springframework.boot:spring-boot-starter-security') 
    compile('org.springframework.boot:spring-boot-starter-web') 
    compile('org.springframework.boot:spring-boot-starter:1.4.1.RELEASE'){ 
     exclude group:'org.springframework.boot', module:'spring-boot-starter-logging' 
    } 

    compile('org.springframework.boot:spring-boot-starter-jdbc'){ 
     exclude group:'org.apache.tomcat', module:'tomcat-jdbc' 
    } 
    compile('mysql:mysql-connector-java') 
    compile('com.zaxxer:HikariCP-java6:2.3.13') 
    compile('org.springframework.boot:spring-boot-starter-log4j2:1.4.1.RELEASE') 

    compile('com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.8.8') 
    compile('com.google.zxing:core:3.3.0') 
    compile('org.antlr:antlr4-runtime:4.5') 

    testCompile('org.springframework.boot:spring-boot-starter-test') 
} 

编辑3, 进一步更新,

于是我连接远程调试器,我发现春天使用ContentNegotiatingViewResolver将视图解析为InternalResourceView,但当我通过弹簧工具套件执行,它将正确解析为FreemarkerView。 我希望这可以帮助别人缩小我的问题。通过逐步调试,我会看看是否能够在其他任何地方获得。

+0

下载您应该包括错误信息(堆栈跟踪),以及在这样的问题。 – ddekany

+0

不幸的是我没有得到任何错误,所以不能告诉我哪里出错了。有没有一个调试或跟踪标志,我可以打开时运行打包jar? – mrunal

+0

展开你的jar文件,以确保jar文件在lib目录中。 –

回答

0

也许freemarker jar文件没有被指定为你的spring启动应用程序模块的依赖项。不确定您是否正在运行maven或gradle,但确保您的build中包含freemarker库。

见@https://mvnrepository.com/artifact/org.freemarker/freemarker

+0

嗨,谢谢你的回复。我正在使用gradle。我尝试在gradle依赖中明确包含org.freemarker,但仍然是同样的问题。 :/ 我已经用我的gradle文件更新了原始文章。如果您发现错误,您可以请看看吗? – mrunal

+0

显示你的jar文件的内容:tar -tvf target/{your_jar_file} –