在Grails 3.1.7中建立一场苗条的战争

时间:2016-06-06 13:48:15

标签: grails gradle war

我想组装一个没有任何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

之后没有修改任何视图

2 个答案:

答案 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无法重现该行为,故障单已关闭。虽然对我来说它仍然没有用。

所以我提出了一个简单的解决方法,这不像我原来的愿望那么优雅,但非常简单:

  1. 将苗条的.war文件解压缩到〜/ ROOT /

  2. 将所有Grails 3.1.11 + plugins依赖jar复制到〜/ ROOT / WEB-INF / lib

  3. 注意:sym-link不能正常工作......

    1. 将〜/ ROOT文件夹移动到/ opt / tomcat / webapps
    2. 因此,我在构建机器上创建并发送到prod的war文件仍然很薄