我在使用 Grails 2.2.3 时遇到了一个问题,当我运行 grails run-war
或grails war
然后部署到 Tomcat 服务器时,Spring Security 添加的 login/auth.gsp 视图没有显示在浏览器中。但是,当我执行grails run-app
或grails prod run-app
时,它显示并且工作正常。我已经多次执行grails clean
,并重新编译和刷新依赖项。
需要注意的几点:
- 我的
login/auth.gsp
视图位于我正在使用的自定义 UI 插件中。它在项目BuildConfig.groovy
文件作为就地插件。 - 我的
main.gsp
模板也在那个自定义 UI 插件中。
浏览器返回 HTTP 404:
type Status report
message /processes/WEB-INF/grails-app/views/login/auth.jsp
description The requested resource is not available.
有谁知道这个问题可能是什么,或者我该如何解决它?
如果我没记错的话,我们项目中遇到了完全相同的问题。
问题是(对您来说可能是一样的)我们为插件设置了两个版本。
一个是在应用程序属性中设置
的app.version=0.1
并且比插件描述符中有一个集
def version = "0.1"
如果从 application.properties 中删除版本声明,它应该可以工作。插件的版本是通过插件描述符设置的,项目的版本是通过 application.properties 设置的。我不知道我们是如何得到两个版本声明的,但我猜要么是由于一些复制和粘贴错误,要么是由于 Grails 曾经使用 app.version
生成插件的 application.properties 。
即使在阅读此线程后,这也让我发疯了几天。
我正在使用Grails 1.3.7,我有几个来自供应商的插件,我从git存储库中提取。 我最近通过从 git 获取更新版本升级了一些插件,并遇到了这个问题。 似乎当您运行grails war
时,它会构建插件并在每个插件的根目录中创建一个插件.xml文件。 插件.xml中的元数据包含插件版本(显然是从xxxGrailsPlugin.groovy文件中获取的)。 插件.xml 的版本用于命名战争中存储插件代码的文件夹。 当您更改插件版本时出现问题,因为 Grails 似乎没有重新生成插件.xml文件。 grails clean
不会解决问题。 这会导致新版本的插件与旧版本一起存储在其文件夹名称的一部分。
一旦我浏览了插件并删除了所有插件.xml文件,我就可以通过战争成功地重建它,将其部署在 Tomcat 上,而不是获得 404。
当你使用插件来提供资源时,你需要添加 plugin
属性。此属性在大多数Grails标签/方法中都可用。考虑一个名为my-plugin的插件。
要使用资源:
g.resource(dir: "js", file:"myPluginJs.js", plugin: "myPlugin")
要呈现插件视图:
render(view: 'path/to/view', plugin: "myPlugin")
当您声明插件资源文件时也是如此。
modules = {
"my-plugin-module" {
resource url: '/js/app.js', plugin: 'myPlugin'
}
}
我"修复"了它,但我完全不知道为什么它会起作用。
我记得我已经将我的就地插件的版本从"0.1"提升到"1.0"。自从这样做以来,当我发动战争时,该应用程序就不起作用了。将插件版本从 1.0 改回 0.1 已解决此问题。
谁能解释为什么会这样?我也清理并重新编译了 UI 插件,但在我重新调整版本之前,这从未奏效。