grails3 打包后静态资源访问不到

项目打包完成后,资源基本上都引用不到了。要用asset-pipeline插件的引入方式重新改一边-. -!

调试一下发现基本上原因是开发阶段访问项目时候是没有项目名的,在tomcat运行时候有项目名称造成的:

http://localhost:8080/

http://localhost:8080/demo

的区别。 

使用的版本:grails3.1.5

grails3中默认使用了这个插件:

runtime "org.grails.plugins:asset-pipeline"

 官方插件:http://grails.org/plugin/asset-pipeline 

 插件介绍及配置:http://bertramdev.github.io/grails-asset-pipeline/guide/configuration.html

在项目使用过程中,第一次使用grails3 没有太注意这个插件。还是按照原来html资源引入的方式进行引入的。

如:

<link href="assets/xxx/css/font-awesome.min.css" rel="stylesheet" type="text/css" />
<img src="assets/xxx/img/loading.gif" alt="loading"/> 
2.x这种写法也是不行的:
<link href="${resource()}/jquery-xxx/themes/icon.css" rel="stylesheet" type="text/css" >

assets/xxx这种方式在index/index.gsp中使用打包后是没问题的,但是如果是其他页面如user/index.gsp页面这种方式不打包能引用,打包后引用不到。尽量所有的静态资源都使用assets-pipeline插件引入的方式来引入,因为有时候,我们需要通过使用CDN或nginx来访问被分离出来的资源。

需要通过assetPath(src:'。。。。')写src 的路径。

如:

<img src="${assetPath(src: 'xxx/img/loading.gif')}" alt="loading" /> 

 还有其他的写法,资源判断的标签、服务中获取资源等

具体参照官方使用文档:http://bertramdev.github.io/grails-asset-pipeline/guide/usage.html

另外在使用bootstrap或者easyui 等插件库的时候,我们并不想打乱原有的插件目录结构,不想把插件原有的js、css、图片等挨个的粘贴到assets目录下的javascript、images 等目录。

需要在assets下建立一个目录(myplugins),这个目录随便建的,但是引入的时候一定不要加myplugins。(建好后需要重启)

在myplugins 下放jquery-easyui-1.4.5的所有文件。

在页面引用的时候类似于这样:

<link rel="stylesheet" type="text/css" href="${assetPath(src:'jquery-easyui-1.4.5/themes/gray/easyui.css')}">
<script type="text/javascript" src="${assetPath(src:'jquery-easyui-1.4.5/jquery.easyui.min.js')}" ></script>

 注意上面src 中是没有添加myplugins这一级目录的。

没有深究为啥,反正必须要这么写。打成war包tomcat解压后assets中是没有myplugins这个目录的。

猜你喜欢

转载自youngbrick.iteye.com/blog/2339749