我想组装一个没有任何jar文件的war文件(我已将它们复制到我的/opt/tomcat8/lib
目录中)。
我了解了-nojars
options,但它不适用于Grails 3.1.7。
然后我尝试自定义build.gradle
:
war{
rootSpec.exclude "**/*.jar"
}
并且由此产生的战争确实变得非常小~1 MB。虽然当我将它部署到tomcat并调用http://host:8080/
时,我正在
javax.servlet.ServletException:无法解析名称为' / error'的视图在名为' grailsDispatcherServlet'的servlet中 org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1229) org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1029) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:973) org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:895) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:967)
建立苗条战争的正确方法是什么?
侧面注意:
该应用程序仅包含几个域类和脚手架控制器。在grails create-app
答案 0 :(得分:3)
首先在build.gradle
中,您必须将所有compile
依赖关系的范围更改为provided
。由于某些原因,必须保持runtime
依赖关系才能让Grails工作(我还没有解释)。
例如,compile "org.grails:grails-core"
将更改为provided "org.grails:grails-core"
这将停止gradle将libs打包到WEB-INF/lib
,但它现在将创建包含所有依赖项的新文件夹WEB-INF/lib-provided
。外部'不应该看到这些库。应用程序服务器,但是存档(在本例中为war)执行时需要。这是由bootRepackage
任务完成的。
您可以通过将此命令添加到bootRepackage
:
build.gradle
任务
bootRepackage.enabled = false
现在你的war
任务应该创建没有任何jar的存档。
答案 1 :(得分:0)
作为后续行动,我创建了一个issue,由于Graeme无法重现该行为,故障单已关闭。虽然对我来说它仍然没有用。
所以我提出了一个简单的解决方法,这不像我原来的愿望那么优雅,但非常简单:
将苗条的.war文件解压缩到〜/ ROOT /
将所有Grails 3.1.11 + plugins依赖jar复制到〜/ ROOT / WEB-INF / lib
注意:sym-link
不能正常工作......
因此,我在构建机器上创建并发送到prod的war文件仍然很薄