2016-03-15 79 views
1

我创建了一个应用程序,该应用程序使用Groovy,WAR和Gradle作为设置,而不是JPA,MVC等...我为该项目选择的设置。当我从STS开始测试并开始工作时,我一直在努力并将其作为Spring Boot项目运行。Spring Boot WAR与JAR文件路径差异

我决定为了体验启动应用程序而生成WAR并将其放在Tomcat品牌实例中。

我遇到的错误都与文件路径有关,主要是FileNotFoundException。我在src/main/resources/static下有一个目录,我放置了所有的静态内容,css等等......当我在Tomcat外部运行WAR时,它正在寻找Tomcat /bin/目录中的静态内容。如果我将文件复制到该目录并重新启动Tomcat,它可以正常工作。

我试图跨越的最大障碍是知道文件路径究竟是如何转移到WAR以及我应该在哪里放置文件。我以为我在正确的道路上,但也许我误解了这是如何工作的。

编辑

只是用于测试,我跑了WAR文件为可执行,它工作的开箱。当我将它带到现有的Tomcat实例时,我只会遇到问题。知道它是如何工作并通过适当的设置让它正常工作或多或少,这就是我所追求的。

编辑

我明白了为什么这是/bin目录;它与我从何处启动它有关。我从那个目录运行了./catalina run,这恰好是当时它想要静态资源的目录。

+1

我的假设是你把你的战争放在webapps文件夹中并启动tomcat。这样你的应用程序被部署到'http:// localhost:/<战争名称>'。尝试将war重命名为ROOT.war,重新启动tomcat并尝试访问'http:// localhost:' –

+0

上的应用程序。这正是我所做的,我将WAR重命名为ROOT并将其放入'webapps'文件夹 –

+1

这很奇怪,Spring Boot暴露了来自classpath静态文件夹的静态文件夹,例如,如果你在src/main/resources/static中有'myfile.html',你应该可以通过http://访问id localhost:/myfile.html'。你有静态资源的任何自定义配置吗? –

回答

1

首先,我想感谢Evgeni的评论,并帮助我朝着正确的方向前进。我就建立一个新的项目提出了他的建议,以确定可能出错的地方。这样做后,我能够消除我正面临的gradle错误,并且一切都朝着正确的方向发展。

这个问题的答案我问的问题:战争VS jar文件路径之间的区别......

没有任何区别,如果你有你的项目配置正确。我遇到了路径问题,因为它们是这样硬编码的:src/main/resources ...在控制器和其他类中,我试图访问资源。一旦我能够通过将硬编码路径替换为资源来解决该问题,我就不再有路径问题,并且能够在外部Tomcat中运行战争,并且也可以作为独立的可执行文件运行。