亚洲人成网站在线播放2019 _日韩国产欧美精品_久久夜色精品国产欧美乱_在线视频福利一区

當(dāng)前位置:首頁 > 網(wǎng)站舊欄目 > 學(xué)習(xí)園地 > 設(shè)計(jì)軟件教程 > Eclipse WTP Projects Facets實(shí)戰(zhàn)指南(1)

Eclipse WTP Projects Facets實(shí)戰(zhàn)指南(1)
2010-01-14 23:04:49  作者:  來源:

這個(gè)文章基本是"Building Project Facets"的中文版

在WTP中創(chuàng)建Dynamic Web Project工程的時(shí)候提供了Project Facets的功能,它讓用戶在創(chuàng)建web項(xiàng)目的時(shí)候,可以像搭積木一下給我們創(chuàng)建的project添加各種功能模塊,下面我們通過一個(gè)例子來講解一下WTP中的Project Facets的用法

通常我們給創(chuàng)建的工程可能添加以下元素:資源文件, Builder, Nature標(biāo)識(shí)等, 我們知道Eclipse本身提供了一個(gè)Nature的功能,但是Facets跟Nature是有區(qū)別的, 給工程添加Nature是用來給Eclipse底層的工具使用的,而Facets是用來給最終用戶使用的, 通常Facets提供的模塊都是自描述的,這樣可以保證用戶在使用的時(shí)候,避免添加不必要的Facet模塊, 而且對(duì)于我們開發(fā)者而言也避免了在新建向?qū)е胁迦胄碌膚izard page以及避免通過右鍵菜單來給工程添加或者去掉某模塊,從而大大簡化了開發(fā)人員的工作量, 因此Facets對(duì)用戶和開發(fā)者來說都是一個(gè)不錯(cuò)的選擇

下面我們結(jié)合一個(gè)名為FormGen的實(shí)例來介紹, FormGen用來在我們創(chuàng)建的web工程中,加入一些我們自己的jar包以及修改web.xml文件

廢話少說,先在插件工程中添加org.eclipse.wst.common.project.facet.core.facets 擴(kuò)展點(diǎn), 當(dāng)然這里需要在依賴中加入org.eclipse.wst.common.project.facet.core引用,該擴(kuò)展點(diǎn)包羅萬象,這里我們遵循循序漸進(jìn)的原則,從最最簡單的內(nèi)容開始:

xml 代碼
 
  1. <extension point="org.eclipse.wst.common.project.facet.core.facets">    
  2.   
  3.   <project-facet id="{string}"> (0 or more)   
  4.     <label>{string}label>  
  5.     <description>{string}description> (optional)   
  6.   project-facet>  
  7.   
  8.   <project-facet-version facet="{string}" version="{string}"/> (0 or more)   
  9.      
  10. extension>  

這里加入了兩個(gè)節(jié)點(diǎn):project-facet是我們要加入的facet, project-facet-version用來制定我們的facet版本, 每一個(gè)facet至少需要給它指定一個(gè)版本,否則不可用, 后面大家就會(huì)知道,實(shí)際上我們大部分工作都集中在project-facet-version中配置, 配置后的代碼如下:
 

xml 代碼
 
  1. <extension point="org.eclipse.wst.common.project.facet.core.facets">  
  2.   
  3.   <project-facet id="formgen.core">  
  4.     <label>FormGen Corelabel>  
  5.     <description>  
  6.       Enables generation of HTML forms based on XML definition files.   
  7.     description>  
  8.   project-facet>  
  9.   
  10.   <project-facet-version facet="formgen.core" version="1.0"/>  
  11.   
  12.   <project-facet id="formgen.ext">  
  13.     <label>FormGen Extensionslabel>  
  14.     <description>  
  15.       Enables additional FormGen widgets.   
  16.     description>  
  17.   project-facet>  
  18.   
  19.   <project-facet-version facet="formgen.ext" version="1.0"/>  
  20.      
  21. extension>  

設(shè)置好后運(yùn)行我們的插件項(xiàng)目,創(chuàng)建一個(gè)Dynamic Web Project, 在向?qū)е械谝粋(gè)頁面的Target Runtime設(shè)置為none,繼續(xù)進(jìn)入到下一個(gè)頁面,這時(shí)在下面的列表中就會(huì)出現(xiàn)我們添加的兩個(gè)facet

接下來的工作就是給facet指定約束
由于我們的FormGen是基于Servlet的,因此它應(yīng)該適用于所有的Java EE項(xiàng)目.下面我們通過增加約束讓FormGen facet也能在EJB項(xiàng)目向?qū)е惺褂?
下面是我們將要用到的擴(kuò)展節(jié)點(diǎn)的相關(guān)說明:

xml 代碼
 
  1. <extension point="org.eclipse.wst.common.project.facet.core.facets">  
  2.   <project-facet-version>  
  3.     <constraint> (optional)   
  4.       [expr]   
  5.     constraint>  
  6.   project-facet-version>  
  7. extension>  
  8.   
  9. [expr] =   
  10.   <requires facet="{string}" version="{version.expr}" soft="{boolean}"/> or   
  11.   <conflicts facet="{string}" version="{version.expr}"/> or   
  12.   <conflicts group="{string}"/> or   
  13.   <and>  
  14.     [expr] (1 or more)   
  15.   and> or   
  16.   <or>  
  17.     [expr] (1 or more)   
  18.   or>  

約束由樹狀結(jié)構(gòu)的表達(dá)式組成, 它包括4個(gè)部分,這里我們分別來加以說明:

requires:是用的最多的部分,它表示當(dāng)前的facet還需要依賴的其他facet, 如果對(duì)所依賴的facet沒有版本要求,那么不用設(shè)置version屬性, version可以設(shè)置為表達(dá)式, soft屬性用來創(chuàng)建一種特定類型的依賴,即如果依賴facet不存在,那么當(dāng)前facet將不會(huì)在選項(xiàng)列表中出現(xiàn),其本facet必須在引用facet之后被安裝

conflicts:沖突約束用來制定如果在同一個(gè)工程中已經(jīng)存在了這里指定的facet,那么當(dāng)前聲明的facet將不可用,它用兩種形式:可以指定單個(gè)沖突或組(group)沖突的facet.對(duì)于組沖突,這里需要解釋一下, 組沖突用來指定當(dāng)前的facet與沒有在facet列表中列出的某一類facet有沖突,比如說, WTP自己的moudule facet都屬于moudules組, 而這些facet在定義的時(shí)候,都將組沖突設(shè)置為modules, 這樣就可以保證兩個(gè)module不會(huì)同時(shí)安裝在同一個(gè)工程中

要讓一個(gè)facet屬于某個(gè)組,需要這樣定義擴(kuò)展點(diǎn):

 
  1. <extension point="org.eclipse.wst.common.project.facet.core.facets">      
  2.   <project-facet-version>      
  3.     <group-member id="{string}"/> (0 or more)      
  4.   project-facet-version>      
  5. extension>  

and & or 是用來做邏輯判斷的,寫程序的都知道,這里不做介紹

下面是我們的FormGen的facet定義,為了讓我們創(chuàng)建的項(xiàng)目是一個(gè)Java EE項(xiàng)目,這里我們?cè)O(shè)置FormGen Core依賴jst.web facet. FormGen Ext facet需要建立在 FormGen Core的基礎(chǔ)上

xml 代碼
 
  1. <extension point="org.eclipse.wst.common.project.facet.core.facets">  
  2.   
  3.   <project-facet-version id="formgen.core" version="1.0">  
  4.     <constraint>  
  5.       <requires facet="jst.web" version="2.2,2.3,2.4"/>  
  6.     constraint>  
  7.   project-facet>  
  8.   
  9.   <project-facet-version id="formgen.ext" version="1.0">  
  10.     <constraint>  
  11.       <requires facet="formgen.core" version="1.0"/>  
  12.     constraint>  
  13.   project-facet>  
  14.      
  15. extension>  


實(shí)現(xiàn)Action
經(jīng)過了上面的設(shè)置之后,運(yùn)行插件,在新建工程向?qū)Ю锩孢x擇FormGen Core會(huì)出現(xiàn)錯(cuò)誤提示信息,這是因?yàn)槲覀冞沒有實(shí)現(xiàn)對(duì)應(yīng)的Action,這里所說的Action是指facet所要執(zhí)行的操作,這里有三種類型的action:INSTALL, UNINSTALL, and VERSION_CHANGE,下面的工作就是實(shí)現(xiàn)FormGen Core的action

下面是action對(duì)應(yīng)的擴(kuò)展點(diǎn)設(shè)置格式:

xml 代碼
 
  1. <extension point="org.eclipse.wst.common.project.facet.core.facets">  
  2.   <action id="{string}" facet="{string}" version="{version.expr}" type="INSTALL|UNINSTALL|VERSION_CHANGE">  
  3.     <delegate class="{class:org.eclipse.wst.common.project.facet.core.IDelegate}"/>  
  4.     <property name="{string}" value="{string}"/> (0 or more)   
  5.   action>  
  6. extension>  


下面我們對(duì)上述設(shè)置進(jìn)行一下說明:
version屬性可以是單個(gè)值也可以是表達(dá)式,如果action使用所有的facet,那么不設(shè)置

id屬性可選,如果不制定,系統(tǒng)將以"[facet-id]#[version-expression]#[action-type](#[prop-name]=[prop-value])*"格式創(chuàng)建一個(gè), 為了可讀性,最好自己制定id

在action內(nèi)部還可以在project-facet-version元素內(nèi)部中使用,如果是這樣的話,那么facet和version屬性將被忽略,如果同一個(gè)action delegate實(shí)現(xiàn)被多個(gè)facet 版本使用,那么最好在外面單獨(dú)設(shè)置一個(gè)action節(jié)點(diǎn),這樣系統(tǒng)會(huì)進(jìn)行優(yōu)化

對(duì)于VERSION_CHANGE類型的Action而言, 那么制定了version信息之后,其行為將會(huì)收到一些限制, 我們只需要在action下的property中制定from.versions屬性即可,其值可以是單個(gè),也可以是表達(dá)式

我們的FormGen Core的action要做兩件事:(1)copy formgen-core.jar 到項(xiàng)目的WEB-INF/lib 目錄下;(2)將FormGen servlet添加到web.xml中.而FormGen Ext會(huì)將copy formgen-ext.jar 到WEB-INF/lib 目錄下

xml 代碼
 
  1. <extension point="org.eclipse.wst.common.project.facet.core.facets">  
  2.   
  3.   <project-facet-version facet="formgen.core" version="1.0">  
  4.     <action type="INSTALL">  
  5.       <delegate class="com.formgen.eclipse.FormGenCoreFacetInstallDelegate"/>  
  6.     action>  
  7.   project-facet-version>  
  8.   
  9.   <project-facet-version facet="formgen.ext" version="1.0">  
  10.     <action type="INSTALL">  
  11.       <delegate class="com.formgen.eclipse.FormGenExtFacetInstallDelegate"/>  
  12.     action>  
  13.   project-facet-version>  
  14.      
  15. extension>  

 

java 代碼
 
  1. package com.formgen.eclipse;   
  2.   
  3. import org.eclipse.core.resources.IFolder;   
  4. import org.eclipse.core.resources.IProject;   
  5. import org.eclipse.core.runtime.CoreException;   
  6. import org.eclipse.core.runtime.IProgressMonitor;   
  7. import org.eclipse.core.runtime.Path;   
  8. import org.eclipse.wst.common.project.facet.core.IDelegate;   
  9. import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;   
  10.   
  11. public final class FormGenCoreFacetInstallDelegate implements IDelegate   
  12. {   
  13.     public void execute( final IProject pj,   
  14.                          final IProjectFacetVersion fv,   
  15.                          final Object config,   
  16.                          final IProgressMonitor monitor )   
  17.   
  18.         throws CoreException   
  19.   
  20.     {   
  21.         monitor.beginTask( ""2 );   
  22.   
  23.         try  
  24.         {   
  25.             final IFolder webInfLib = Utils.getWebInfLibDir( pj );   
  26.   
  27.             Utils.copyFromPlugin( new Path( "libs/formgen-core.jar" ),   
  28.                                   webInfLib.getFile( "formgen-core.jar" ) );   
  29.   
  30.             monitor.worked( 1 );   
  31.   
  32.             Utils.registerFormGenServlet( pj );   
  33.   
  34.             monitor.worked( 1 );   
  35.         }   
  36.         finally  
  37.         {   
  38.             monitor.done();   
  39.         }   
  40.     }   
  41. }   
  42.   

java 代碼

 
  1. package com.formgen.eclipse;   
  2.   
  3. import org.eclipse.core.resources.IFolder;   
  4. import org.eclipse.core.resources.IProject;   
  5. import org.eclipse.core.runtime.CoreException;   
  6. import org.eclipse.core.runtime.IProgressMonitor;   
  7. import org.eclipse.core.runtime.Path;   
  8. import org.eclipse.wst.common.project.facet.core.IDelegate;   
  9. import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;   
  10.   
  11. public final class FormGenExtFacetInstallDelegate implements IDelegate   
  12. {   
  13.     public void execute( final IProject pj,   
  14.                          final IProjectFacetVersion fv,   
  15.                          final Object config,   
  16.                          final IProgressMonitor monitor )   
  17.   
  18.         throws CoreException   
  19.   
  20.     {   
  21.         monitor.beginTask( ""1 );   
  22.   
  23.         try  
  24.         {   
  25.             final IFolder webInfLib = Utils.getWebInfLibDir( pj );   
  26.   
  27.             Utils.copyFromPlugin( new Path( "libs/formgen-ext.jar" ),   
  28.                                   webInfLib.getFile( "formgen-ext.jar" ) );   
  29.   
  30.             monitor.worked( 1 );   
  31.         }   
  32.         finally  
  33.         {   
  34.             monitor.done();   
  35.         }   
  36.   
  37.     }   
  38. }   
  39.   

 


 

xml 代碼
 
  1. <extension point="org.eclipse.wst.common.project.facet.core.facets">  
  2.   <category id="{string}">  
  3.     <label>{string}label>  
  4.     <description>{string}description> (optional)   
  5.   category>  
  6.   <project-facet>  
  7.     <category>{string}category> (optional)   
  8.   project-facet>  
  9. extension>  


設(shè)置如下:
 

xml 代碼
 
  1. <extension point="org.eclipse.wst.common.project.facet.core.facets">  
  2.   
  3.   <category id="formgen.category">  
  4.     <label>FormGenlabel>  
  5.     <description>Enables generation of HTML forms based on XML definition files.description>  
  6.   category>  
  7.   
  8.   <project-facet id="formgen.core">  
  9.     <category>formgen.categorycategory>  
  10.   project-facet>  
  11.   
  12.   <project-facet id="formgen.ext">  
  13.     <category>formgen.categorycategory>  
  14.   project-facet>  
  15.   
  16. extension>  


效果如圖

 


安徽新華電腦學(xué)校專業(yè)職業(yè)規(guī)劃師為你提供更多幫助【在線咨詢
亚洲人成网站在线播放2019 _日韩国产欧美精品_久久夜色精品国产欧美乱_在线视频福利一区
国产精品8888| 国产精品一区久久久| 国产一区二区免费在线观看| 久久久久久综合网天天| 中文字幕在线观看一区二区三区| 黄色国产一级视频| 日韩视频在线免费观看| 日本在线播放一区| 国产成人精品999| 亚洲a一级视频| 99久久99久久精品国产片| 精品产品国产在线不卡| 日韩精品第1页| 国产mv久久久| 日本wwwcom| 久久久久资源| 日韩视频一二三| 国产成人精品电影久久久| 性欧美大战久久久久久久| 91精品美女在线| 欧美一区二区三区四区在线 | 久久精品这里热有精品| 天天久久人人| 国产成人成网站在线播放青青| 大j8黑人w巨大888a片| 国产精品1区2区在线观看| 天堂av在线中文| 国产成人精品a视频一区www| 欧美一级片免费观看| 久久本道综合色狠狠五月| 日韩国产小视频| 久久艹中文字幕| 欧美日韩精品免费观看视一区二区| 久久精品国产亚洲精品2020| 精品欧美一区二区在线观看视频| 国产精品初高中精品久久| 亚洲三区视频| 久青草视频在线播放 | 豆国产97在线| 亚洲蜜桃av| 国产chinese精品一区二区| 任我爽在线视频精品一| 国产精品老牛影院在线观看 | 国产精品手机播放| 国产日韩精品一区二区| 亚洲精品一区二区毛豆| 久久黄色片视频| 欧美在线一区二区三区四区| 国产精品久久久久999| 免费日韩中文字幕| 亚洲一区二区三区色| 日韩一区二区av| 国产欧美丝袜| 欧美一级视频免费在线观看| 国产精品视频免费在线| www.av蜜桃| 欧美性在线视频| 一区二区三区不卡在线| 日韩在线www| 国产精品一色哟哟| 日本欧美精品久久久| 欧美精品在线极品| 国产成人亚洲综合青青| 欧美xxxx黑人又粗又长精品 | 久久黄色片视频| 蜜桃日韩视频| 亚洲精品乱码久久久久久蜜桃91 | 国产成人看片| 国产女人18毛片水18精品| 色中文字幕在线观看| 国产精品美女www爽爽爽视频| 97福利一区二区| 国产美女精品视频免费观看| 视频一区三区| 久久亚洲影音av资源网| 91干在线观看| 国产中文日韩欧美| 日本不卡高字幕在线2019| 久久99精品久久久久久青青91| 久草青青在线观看| 97人人模人人爽人人喊38tv| 好吊色欧美一区二区三区视频 | 国产免费视频传媒| 日韩精品一区二区三区不卡| 中文字幕色呦呦| 国产精品欧美久久| 久久久噜噜噜久噜久久| 国产天堂在线播放| 日韩免费一级视频| 亚洲va男人天堂| 九九久久久久久久久激情| 久久久国产精品亚洲一区| 久久偷看各类wc女厕嘘嘘偷窃| 国产一区福利视频| 欧美精品在欧美一区二区| 日韩中文字幕组| 亚洲最大福利视频网站| 国产精品成人久久久久| 久久精品一区中文字幕| 久久国产日韩欧美| 7777精品久久久久久| 国产免费高清一区| 欧美日韩一道本| 日韩国产一区久久| 日本一级淫片演员| 亚洲 高清 成人 动漫| 一本色道久久综合亚洲精品婷婷| 久久国产精品电影| 国产精品成人一区| 久久成人18免费网站| 国产精品久久一区| 久久色免费在线视频| 日韩有码在线观看| 久草精品电影| 久久av免费观看| 久久久久久午夜| www高清在线视频日韩欧美| 69久久夜色精品国产69| 97伦理在线四区| 91久久久在线| 久久久免费高清电视剧观看| 国产精品99久久免费黑人人妻 | 精品999在线观看| 欧美性大战久久久久| 欧美婷婷久久| 欧美视频在线观看网站| 欧美国产视频在线观看| 经典三级在线视频| 国模视频一区二区三区| 国产综合久久久久| 免费国产一区二区| 国产欧美日韩最新| 国产卡一卡二在线| 高清一区二区三区视频| 国产精品一区电影| 丰满人妻中伦妇伦精品app| av动漫在线看| 久久免费一级片| 日韩一级黄色av| 国产精品流白浆视频| 欧美精品在线视频观看| 欧美成人在线免费| 在线视频亚洲自拍| 亚洲欧洲精品在线| 懂色av一区二区三区在线播放| 亚洲精品自在在线观看| 少妇高潮流白浆| 欧美中文字幕在线观看视频| 欧美国产综合视频| 国产乱子夫妻xx黑人xyx真爽| 成人伊人精品色xxxx视频| 久久久午夜视频| 日日骚久久av| 久色乳综合思思在线视频| 亚洲视频精品一区| 日韩啊v在线| 韩国精品一区二区三区六区色诱| 国产最新免费视频| av动漫在线播放| 日韩最新免费不卡| 国产精品入口日韩视频大尺度 | 日韩av高清不卡| 韩国一区二区av| 91免费国产网站| 国产成人无码av在线播放dvd| 精品国产乱码久久久久久丨区2区 精品国产乱码久久久久久郑州公司 | 日韩av电影免费在线| 激情一区二区三区| 成人免费无码av| 91精品国产成人| 久久精品国产久精国产一老狼| 欧美日韩国产va另类| 日本十八禁视频无遮挡| 狠狠色伊人亚洲综合网站色| 91九色国产在线| 国产精品男人爽免费视频1| 中文字幕在线观看一区二区三区| 欧美资源在线观看| 成人动漫在线观看视频| 久久精品一区中文字幕| 亚洲成人网上| 国产亚洲精品美女久久久m| 久久久99爱| 久久99热精品这里久久精品| 欧美一级片一区| 国产亚洲欧美在线视频| 久久久久五月天| 亚洲欧美日韩精品久久久| 欧美精品久久| 国产成人亚洲欧美| 伊人久久大香线蕉精品| 黄色激情在线视频| 久久久久资源| 亚洲国产欧美不卡在线观看| 精品婷婷色一区二区三区蜜桃| 久久久综合香蕉尹人综合网| 久久国产精品99国产精| 日韩欧美精品久久| 99免费在线观看视频| 国产精品日韩一区二区免费视频 |