Liferay开发文档整理
更新时间:2023-03-14 05:20:01 阅读量: 教育文库 文档下载
Liferay 6.2
Liferay 6.2 .......................................................................................................................................... 1 1. 介绍 ............................................................................................................................................. 3
1.1、已有的应用集成方法: 将应用重写为一个Portlet ....................................................... 3 1.2、自定义主题风格(Themes) .............................................................................................. 3 1.3、自定义布局模板(Layout Templates) ............................................................................... 3 1.4、自定义或扩展门户功能 .................................................................................................. 3 1.5、高级扩展方式:Ext plugins ............................................................................................ 3 2. 插件开发工具包(THE PLUGINS SDK) ........................................................................................... 4
2.1 安装Liferay ........................................................................................................................ 4 2.2 配置Plugins SDK ................................................................................................................ 4 2.3 SDK结构 ............................................................................................................................. 4 3. 开发PORTLET .............................................................................................................................. 5
3.1 创建Portlet........................................................................................................................ 5 3.2 部署Portlet........................................................................................................................ 5 3.3 剖析Portlet........................................................................................................................ 5 3.4 理解Portlet执行的两个阶段 ......................................................................................... 12 3.5 开发支持多个Action的Portlet ..................................................................................... 16 3.6 为Portlet增加URL别名 ................................................................................................ 17 4. 开发主题风格(THEMES) ............................................................................................................ 19
4.1 介绍 ................................................................................................................................. 19 4.2 创建主题风格(Theme) .................................................................................................... 19 4.3 部署主题风格(Theme) .................................................................................................... 19 4.4 剖析Theme ..................................................................................................................... 20 4.5 缩略图(Thumbnail) .......................................................................................................... 22 4.6 JavaScript ........................................................................................................................... 22 4.7 设置(Setting) .................................................................................................................... 23 4.8 颜色方案(Color Schemes) ............................................................................................... 25 4.9 重新定义Portlet样式 ..................................................................................................... 27 4.10 继承主题风格 ................................................................................................................ 28 5. HOOKS ......................................................................................................................................... 29
5.1 创建一个Hook ................................................................................................................ 29 5.2 部署Hook ........................................................................................................................ 31 5.3 重写JSP页面 .................................................................................................................. 31 5.4 不通过重写原来的JSPs定制页面 ................................................................................. 32 5.5 自定义Action .................................................................................................................. 33 5.6 扩展和重写portal.properties ......................................................................................... 34 5.7 重写Portal Service .......................................................................................................... 35 5.8 重写Language.properties文件 ...................................................................................... 37 6. EXT插件 ...................................................................................................................................... 37
6.1 创建Ext插件................................................................................................................... 38
6.2 部署Ext插件................................................................................................................... 40 6.3 安装 ................................................................................................................................. 41 6.4 初始部署.......................................................................................................................... 41 6.5 重新部署.......................................................................................................................... 45 6.6 高级配置文件 .................................................................................................................. 45 6.7 修改核心服务的API ....................................................................................................... 47 6.8 替换portal-impl中的核心类 .......................................................................................... 47 6.9 迁移旧的扩展环境 .......................................................................................................... 48 7.Service Builder .......................................................................................................................... 49
7.1 Service Builder概念 .......................................................................................................... 49 7.2 Service Builder的使用 ...................................................................................................... 49 7.3自定义方法 ....................................................................................................................... 51 8. LIFERAY工具 ............................................................................................................................... 51
8.1 Liferay IDE .......................................................................................................................... 51 8.1.1 安装....................................................................................................................... 51
8.1.2 导入已存在的项目到Liferay IDE中 .................................................................... 53 8.1.3 设置Console Encoding ......................................................................................... 55 8.1.4 测试Liferay portal server ..................................................................................... 55 8.1.5 创建一个新的Liferay plugin项目 ....................................................................... 55 8.2 服务构建器(Service Builder) ........................................................................................... 56
8.2.1 定义模型(Model) .................................................................................................. 56 8.2.2 生成服务 ............................................................................................................... 58 8.2.3 编写本地服务类(Local Service Class)................................................................... 60 8.2.4 内建的Liferay服务(Built-In Liferay Services) ...................................................... 61
9. 应用开发接口和框架(LIFERAY APIS AND FRAMEWORKS) ........................................................ 62
9.1 安全与权限(Security and Permissions) ........................................................................... 62
9.1.1 JSR Portlet Security................................................................................................. 62
9.1.2 Liferay的权限系统 ................................................................................................ 65 9.2 资产框架(Asset Framework) ........................................................................................... 80
9.2.1 增加、更新和删除资产(Adding, updating and deleting assets) ......................... 81 9.2.2 使用资产发布器发布资产(Publishing assets with Asset Publisher) ................... 86 9.3 其它框架(Other frameworks) .......................................................................................... 96
1. 介绍
1.1、已有的应用集成方法: 将应用重写为一个Portlet
创建一个简单的Portlet整合应用(一般使用Web Service),可以使用iframe或http 代理(可以使用Liferay's WebProxy portlet)。
已有的应用要像部署门户插件一样,把WAR文件部署到应用服务器里,可以使用控制面板或直接复制的方式完成。Liferay可以自动创建一个Portlet通过iframe集成已有应用。
1.2、自定义主题风格(Themes)
1.3、自定义布局模板(Layout Templates) 1.4、自定义或扩展门户功能
Hook plugins:Hook plugins可以用来扩展Liferay的核心功能。
1.5、高级扩展方式:Ext plugins
扩展插件可以允许开发人员修改Liferay的核心部分,可以修改任何一个类。 扩展插件部署之后需要重新启动应用服务器。
Liferay 6.0之后用Ext plugins的开发方式替换了原来的Ext Environment开发方式,这样可以简化部署。之前的扩展环境可以转换为一个独立的插件。
2. 插件开发工具包(THE PLUGINS SDK)
2.1 安装Liferay
1、 下载Liferay Portal bundled with Tomcat;http://www.liferay.com/downloads 2、 下载Plugins SDK;
3、 删除liferay-portal-[version]/tomcat-[tomcatversion]/webapps 除 ROOT和tunnel-web目录的其他所有文件夹。
4、 打开liferayportal-[version]/tomcat-[tomcat-version]/bin目录,运行startup.bat,启动Liferay。
5、 http://localhost:8080,默认帐号/密码:test@liferay.com/test。 6、 设置环境变量ANT_HOME,将$ANT_HOME/bin加入到PATH环境变量中。
2.2 配置Plugins SDK
创建一个文件,名为build.${user.name}.properties,添加如下内容:app.server.dir={应用服务器目录}。如:liferay-portal-[version]/tomcat-[version]。
2.3 SDK结构
在每一个Plugins SDK目录下都有一个创建相应类型新的plugins的脚本。新创建的plugins放在相应plugins的子目录下。例如:一个新的portlet叫“greeting-portlet”,那么相对应的就会有liferayplugins-sdk-6/portlets/greeting-portlet文件夹。
Plugins SDK可以放在一个统一的项目中,也可以为每一个插件(Plugins)创建一个项目。也可以创建单独的主题风格项目。
3. 开发PORTLET
3.1 创建Portlet
创建一个Portlet,必须指定两个名字,一个项目名称,另一个是Portlet的标题(显示名称)。例如,创建一个“my-greeting”Portlet项目,标题可以命名为 \My Greeting\。创建方法如下:
1、 打开命令窗口,定位到SDK目录的portlets目录; 2、 执行如下命令:create.bat my-greeting \Greeting\
3.2 部署Portlet
部署方法如下:
1、 打开命令窗口,定位到创建的Portlet所在目录; 2、 执行如下命令: ant deploy;
3、 命令执行成功后,上一步创建的Portlet会被复制到应用服务器的deploy目录下;启动应用服务器,应用服务器会自动部署deploy目录下未部署的Portlet;
3.3 剖析Portlet
一个Portlet项目最少包含如下三个部分:
1、Java程序(存放在/PORTLET-NAME/docroot/WEB-INF/src目录下) 2、配置文件(存放在/PORTLET-NAME/docroot/WEB-INF目录下)
3. 客户端文件(如*.jsp, *.css, *.js等)(存放在/PORTLET-NAME/docroot目录下) 以上文件会存放在如下一个标准的目录结构下: /PORTLET-NAME/
build.xml /docroot/ /css/
/js/ /WEB-INF/ /src/
liferay-display.xml
liferay-plugin-package.properties liferay-portlet.xml portlet.xml web.xml icon.png view.jsp
一个新的Portlet使用默认的MVCPortlet框架进行配置,MVCPortlet框架为每一个Portlet使用独立的JSP页面进行配置。不同的JSP页面完成不同模式的操作,例如:edit.jsp 用来编辑, help.jsp用来显示帮助,view.jsp用来显示内容。
JSR-286规范的portlet配置文件portlet.xml和Liferay特有的Portlet配置文件都存放在/docroot/WEB-INF目录下。
liferay-display.xml:这个配置文件描述每一个Portlet的分类结构,会在添加应用页面上显示。
liferay-portlet.xml:这个配置文件描述部署在应用服务器中Liferay特有的符合JSR-286规范的Portlet。例如,可以在一个页面上放置多个portlet实例,每一个实例可以访问各自的数据。详细说明查看Liferay源代码存放目录下的DTD文件。
liferay-plugin-package.properties:这个文件描述了热部署到Liferay服务器中的插。如果一个Portlet插件依赖于服务器中已有的某些.jar文件,可以在这个配置文件中配置相应的.jar文件列表,服务器在热部署的时候会自动将相关的.jar文件部署到当前Portlet的相应目录下,不需要人工去复制。
1、docroot/WEB-INF/portlet.xml portlet默认配置信息如下:
//Portlet名称(ID),要唯一 //Portlet标题(显示名) //Portlet引用的类名
//Portlet初始化参数,须name/value配对使用
//Portlet的失效时间,-1表示永不失效 //Portlet支持的mime文件类型
//定义哪些角色可以访问当前portlet
2、docroot/WEB-INF/liferay-portlet.xml 此配置文件是Liferay对portlet.xml的扩展。
//portlet所使用ico文件的路径 //是否可以在页面上添加多个实例 //页面头包含的css文件
3、编写一个My Greeting Portlet
Portlet包含两个页面:view.jsp,用于显示问候信息和链接编辑页面;Edit.jsp,提供一个带编辑框的表单,用于编辑问候的话语,同时带一个可以返回显示页面的链接。
(1) 编辑liferay-portlet.xml:
设置
(2) 修改view.jsp and replacing its current contents with the following: <%@ taglib uri=\prefix=\%> <%@ page import=\%>
<%PortletPreferences prefs = renderRequest.getPreferences();
String greeting = (String)prefs.getValue( \\Welcome to o
ur portal.\ %>
<%= greeting %>
\greeting
Next, create edit.jsp in the same directory as view.jsp with the following content:
<%@ taglib uri=\prefix=\%> <%@ taglib uri=\prefix=\%> <%@ page import=\%>
<%PortletPreferences prefs = renderRequest.getPreferences();
String greeting = renderRequest.getParameter(\ if (greeting != null) {
prefs.setValue(\greeting); prefs.store(); %>
Greeting saved successfully!
<% } %><%greeting = (String)prefs.getValue(\\Welcome to our portal.\%>
\method=\
\/>
\Back
注意:如果开发的portlet部署成功,但是浏览器端看到结果仍然没有变化,则可能是JSP页面需要重新编译,可以删除“work”文件夹,启动应用服务器即可。
3.4 理解Portlet执行的两个阶段
假设一个应用场景:一个页面上有两个portlet,一个是用于导航,另一个用于购物。用户访问这个页面的过程为:加载页面;单击购物Portlet上的“支付”按钮,系统自动开始执行支付进程,从用户的信用卡上支付相应的金额;操作结束后,页面调用导航Portlet的默认视图;单击导航portlet上的链接切换其它内容。
以上操作,用户不需要等待支付完成后的反馈结果就可以做其它操作了,如果用户重复点击“支付”按钮也不会出现重复支付的问题。Portlet分两个阶段的执行方式可以解决以上问题:
Action(执行)阶段:这个阶段在一个时间只能有一个portlet被引用,而且只为一个用户反馈结果。在这个阶段Portlet可以改变它的状态,实例可以根据用户的设置动态改变。因此,同一时间不会出现重复操作数据库的问题。
Render(反馈)阶段:这个阶段一般在action阶段执行结束后被页面上的所有portlet引用。需要注意的是在render阶段,在页面上得到executedis不一定会得到标准的portlet支持。Liferay在liferay-portlet.xml中定义一个扩展的元素render-weight来支持。
上面例子中的portlet,只有Render阶段,我们可以创建一个class来增加Action阶段。
1、增加Action阶段 package com.liferay.samples; import java.io.IOException; import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse; import javax.portlet.PortletException; import javax.portlet.PortletPreferences;
import com.liferay.util.bridges.mvc.MVCPortlet;
public class MyGreetingPortlet extends MVCPortlet { @Override
public void processAction(ActionRequest actionRequest, ActionResponse actionResponse) throws IOException, PortletException {
PortletPreferences prefs = actionRequest.getPreferences(); String greeting = actionRequest.getParameter(\if (greeting != null) {
prefs.setValue(\greeting); prefs.store(); }
super.processAction(actionRequest, actionResponse); } }
在portlet.xml中增加新建的class信息:
最后,需要修改一下edit.jsp,修改form(表单)的URL,以便门户知道要执行action阶段。一般portlet有三中类型的URL:
renderURL: 这种类型的URL之前的例子已经用到了。只有在render阶段引用。
actionURL: 这种类型的URL告诉Portlet在所有portlet反馈之前执行相应的action。
resourceURL: 这种类型的URL一般用来检索图片、XML、JSON等媒体资源文件,也常用于使用AJAX请求服务的情况。这种类型的URL一般会在请求中完全控制发送的数据。
修改edit.jsp使用actionURL,名称与JSP标签(tag)一样: <%@taglib uri=\prefix=\%> <%@ taglib uri=\prefix=\%> <%@ page import=\%> <%@ page import=\%> <%@ page import=\%>
PortletPreferences prefs = renderRequest.getPreferences();
String greeting = (String)prefs.getValue(\\Welcome to our portal.\
%>
\method=\
\/>
\Back
修改之后,重新部署portlet。打开edit页面并单击“保存”按钮,会出现报错信息。需要在processAction中增加异常捕获的代码:
try {
prefs.setValue(\greeting); prefs.store(); }
catch(Exception e) {
SessionErrors.add(actionRequest, \}
在这样修改后,可以在JSP页面中增加liferay-ui:success我们定义的信息:
3.5 开发支持多个Action的Portlet
以上例子中的代码,我们只用到一个Action,有时候我们需要多个action一起执行。例如发送邮件给多个人。下面我们来重写前面的例子,自定义一个方法用来设置greeting并且增加第二个action。
public class MyGreetingPortlet extends MVCPortlet {
public void setGreeting(ActionRequest actionRequest, ActionResponse actionResponse)throws IOException, PortletException {
PortletPreferences prefs = actionRequest.getPreferences(); String greeting = actionRequest.getParameter(\if (greeting != null) { try {
prefs.setValue(\greeting); prefs.store();
SessionMessages.add(actionRequest, \}
catch(Exception e) {
SessionErrors.add(actionRequest, \} } }
public void sendEmail(ActionRequest actionRequest, ActionResponse actionResponse)throws IOException, PortletException {
// Add code here to send an email } }
现在我们需要修改edit.jsp,修改actionURL:
3.6 为Portlet增加URL别名
当我们打开一个链接后,我们会看到诸如下面的
URL:http://localhost:8080/web/guest/home?p_p_id=mygreeting_WAR_mygreetingportlet&p_p_lifecycle=0&p_p_state=normal&p_p_mode=view&p_p_col_id=column-1&_mygreeting_WAR_mygreetingportlet_jspPage=/edit.jsp
在Liferay 6中,可以将以上的链接映射为如下形式:http://localhost:8080/web/guest/home/-/my-greeting/edit
首先,修改liferay-portlet.xml,在 之后、
然后,创建一个文件:
my-greeting-portlet/docroot/WEB-INF/src/com/sample/mygreeting/portlet/my-greeting-friendly-url-routes.xml
增加如下内容:
\
重新部署Portlet。
4. 开发主题风格(THEMES)
4.1 介绍
开发主题风格比较简单,通常需要使用到如下技术: CSS:可以通过创建新的CSS文件定义一个全新的样式。
Velocity:一个简单而功能强大的工具,可以创建页面模板。可以用来定义HTML模板用作主题风格(theme)。
JavaScript: 可以用来增加一些特殊的动态效果或行为。 XML:每一个主题风格的配置信息都存在XML文件中。
4.2 创建主题风格(Theme)
1、 打开命令窗口,定位到SDK目录的Themes目录; 2、 执行如下命令:
create.bat deep-blue \Blue\//deep-blue为theme名称(ID),“Deep Blue”为theme标题(显示名称)
4.3 部署主题风格(Theme)
1、 打开命令窗口,定位到SDK目录的/Themes/deep-blue-theme目录; 2、 执行如下命令:ant deploy
3、 命令执行成功后,上一步创建的theme会被复制到应用服务器的deploy目录下;启动应用服务器,应用服务器会自动部署deploy目录下未部署的theme。
4.4 剖析Theme
创建的主题风格目录结构如下: /deep-blue-theme/ /docroot/ /WEB-INF/
liferay-plugin-package.properties /_diffs/ (默认没有子目录) /images/ /js/ main.js /templates/ init_custom.vm navigation.vm portal_normal.vm portal_pop_up.vm portlet.vm /css/
application.css base.css custom.css dockbar.css extras.css forms.css layout.css main.css navigation.css portlet.css
_diffs目录是用来存放自定义主题风格的,存放在此目录下的样式文件或图片资源会重写默认的主题风格。一般建议把自定义的主题风格样式文件放在这个文件夹下,这样以后升级Liferay主题风格时就不会影响原来的程序。
例如:对于上面的例子,我们要自定义导航栏(navigation)的模板,可以复制 deepblue-theme/docroot/templates/navigation.vm到_diffs/templates(文件夹要先创建),然后打开这个文件进行修改。自定义样式,可以在_diffs目录下创建css文件夹,然后从/docroot/css目录下把custom.css复制过来,然后修改相应样式表。
重新部署主题风格,即可看到修改后的页面。
4.5 缩略图(Thumbnail)
将主题风格截图放在_diffs/images目录下,命名为thumbnail.png即可看到150*120pixels的缩略图;命名为screenshot.png,即可看到1080*864pixels的缩略图。
4.6 JavaScript
目前,Liferay包含了自己的JavaScript脚本库,这个库是对Yahoo's YUI3框架的扩展,使用这些脚本可以开发出更高级的主题风格。在main.js文件中,可以发现如下代码:
AUI().ready( function() { } );
Liferay.Portlet.ready( /*
此函数在所有portlet加载之后被调用. portletId: the current portlet's id
node: the Alloy Node object of the current portlet */
function(portletId, node) { } );
Liferay.on( 'allPortletsReady', /*
这个函数在任何时候都可以加载。 */
function() { } );
注:AUI().ready(fn):这个函数在页面加载后就会被执行。
Liferay.Portlet.ready(fn):这个函数在页面上的每一个portlet加载后执行,调用两个参数:portletId and node。portletId是当前正在加载的portlet,node是当前portlet的Alloy Node对象。
Liferay.on('allPortletsReady', fn):这个函数在所有对象加载完成之后被调用。
4.7 设置(Setting)
主题风格的配置信息存放在WEB-INFO目录下的liferay-look-and-feel.xml文件里。这个文件默认是没有的,需要手动创建。内容如下:
这个文件的配置信息可以在主题风格的模板文件中调用,调用方法如下: $theme.getSetting(\
对于有时候只需要修改标题或Banner的情况,我们需要创建两个theme。一个用于定义细节和特殊部分,另一个用于定义通用部分。
代替创建两个theme的办法,我们可以只创建一个theme,在配置文件中进行设置,选择我们需要的内容。方法如下:
1、portal_normal.vm文件中,我们配置如下信息:
#if ($theme.getSetting(\== \#parse (\#else
#parse (\#end
2、在liferay-look-and-feel.xml文件中,我们设置两个不同的项目,指向同一个theme,但是设置不同的值。设置内容如下:
4.8 颜色方案(Color Schemes)
颜色方案一般用一个CSS样式表名称,不仅可以定义不同的颜色而且可以定义不同的背景图片和不同的边框颜色。
在liferay-look-and-feel.xml文件中定义如下内容:
在_diffs/css目录下创建一个color_schemes文件夹,用来防止每一中颜色方案。在上面的例子中,我们可以定义一个默认的night.css和另外一个day.css。在自定义的custom.css文件底部增加如下内容:
@import url(color_schemes/day.css); @import url(color_schemes/night.css);
The color scheme CSS class is placed on the
element, so you can use it to identify you styling. In day.css you would prefix all of your CSS styles like this: 色彩方案是放在元素中的,因此可以在day.css中的每一个CSS样式前加上如下前缀: body.day { background-color: #ddf; }.day a { color: #66a; } 在night.css中加入如下前缀:
body.night { background-color: #447; color: #777; } .night a { color: #bbd; }
可以为每种色彩方案定义缩略图。在
4.9 重新定义Portlet样式
还有一些设置可以呈现出不同的效果,这些设置可以通过修改liferay-look-and-feel.xml实现。
1)portlet-setup-show-borders-default:设置为false则所有portlet不显示边框,默认值为ture。
例如:
2)bullet-style-options:在导航的portlet中确定CSS样式的名称列表,设置值必须用逗号隔开并且是已定义的bullet样式名称。
例如:
Bullet-style可以被用户修改,这些被选出来的样式作为CSS class在导航栏的中使用。
3)样式表的名称必须是如下模式:
.nav-menu-style-{BULLET_STYLE_OPTION} { ... CSS selectors ... }
如下的例子是用在HTML代码中的样式。在这个例子中,bullet-style设置为modern。
使用样式表和Javascript,可以生成很多类型的菜单。
4.10 继承主题风格
默认的theme都是基于_styled theme生成的,只提供基本的样式。如果打开theme目录下的build.xml文件,可以看到如下内容:
theme.parent属性规定了在生成的theme是从那个theme中继承的。同样的,也可以使用选择从 _unstyled主题继承,这样就需自己编写新的样式。但是,这样就可以更加灵活地定义自己的样式文件了。还可以从Liferay默认的classic主题中继承或从其它已有的主题风格中继承。
5. HOOKS
Liferay Hooks是一个新的插件类型。采用hook插件,我们可以扩展Liferay的核心组件。例如portlets,layout templates和themes,这些都可以使用Plugins SDK创建。
Hooks也可能被用在Ext plugins中,用来支持热部署或兼容以前的组件。 通常的情况下,使用一个Hook实现一些在Portal启动或者用户登录时要用到的组件,可以通过重写或扩展JSP,修改portal properties或替换一个portal service来实现。
5.1 创建一个Hook
1、 打开命令窗口,定位到SDK目录的Hooks目录; 2、 执行如下命令: create.bat example \或者:
1、在liferay IDE中,New Liferay Project-->选择hook-->输入project Name,点击完成,即可创建一个hook工程。
2、在IDE的工具条中,选择New Liferay hook,选择我们要创建的hook类型,如下图:
custom JSp:为自定义的JSP文件 portal properties:覆盖portal属性
Services:这个可以可以做两件事情一是覆盖事件处理程序;二是覆盖service类
Lanuage properties:这个覆盖或者新增国际化的语言文件。 3、以Custom JSPs为例,点击下一步,如下图:
尽量的使用 Add from Liferay。这样我们可以在弹出的界面中选择相应的我们要覆盖的JSP路径。点击完成。
4、现在demo-hook工程目录下的docroot/custom_jsps下面将出现我们上面选择的路径的JSP文件,此文件下的JSP路径 一定要和Liferay root下的待覆盖的JSP路径相符。现在就可以编辑此JSP来覆盖我们想覆盖的内容,打开此JSP可以看到这里面的内容和portal下面的JSP内容 完全一样,修改想修改的部,点击ant的deploy即可发布。
5、对于示例中的top_js.jspf文件,可以做什么呢?top_js.jspf此文件是portal的头部JS的加载程序。比如我要在我的 portlet工程里面引用jQuery库,则可以在top_js.jsp里面将jQuery的库引进来,这样在portlet的工程里面不用每个页面都 需要引用jQuery,可以避免一个页面中多个portlet引用jQuery引起的冲突。引用方法如下
在top_js.jspf的最后部分添加:
正在阅读:
Liferay开发文档整理03-14
美丽的翠华山作文300字07-06
知识城南片科技大道道路工程 - 图文04-17
密码编码学与网络安全10期末试卷07-25
用友NC财务报表系统操作步骤06-01
项目经理各知识领域常见问题 -11-06
《农作物生产技术》练习题10-18
人教版五年级语文上册 课外古诗文背诵03-15
导流洞封堵施工方案01-30
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 整理
- Liferay
- 文档
- 开发
- 数据库应用技术思考与练习参考答案(周慧)
- 光纤组网基础知识
- 一年级心理教育计划、总结及导学案
- 30m箱梁运输、架设、安装专项方案技术交底
- 小学数学几何与图形分学习心得
- 关于进一步加强干部队伍建设的思考
- 分析香奈儿在我国的发展
- 2015年上半年广西地矿局所属事业单位招聘考试内容
- 名师课堂:词汇精讲四 词根运用和范例
- 碳酸二甲酯安全技术说明
- 浅析短波通讯的应用和发展
- 心理健康常识
- 015-武汉工程大学-07-胡端平-科学思维、科学方法在概率统计课程中的应用与实践
- 第1节 曲线运动
- 六年级学生英语学情分析模板
- 宜宾五粮液股份有限公司财务分析
- 2018年最新语文中考文学、文化常识专题复习及答案
- 化学教学论试卷AB(含答案)
- 考研数学公式手册
- 生化基础实验