日本免费精品_最新日韩一区_亚洲视频一区在线_a在线视频观看_天天射夜夜骑_粉嫩av一区二区三区_欧美中日韩免费视频_综合图区欧美_国内精品美女在线观看_午夜精品久久久久久久男人的天堂

首頁 > 學院 > 開發設計 > 正文

為項目自動添加構建路徑

2019-11-18 13:40:19
字體:
來源:轉載
供稿:網友

CowNew 開源團隊網站 www.cownew.com 

論壇 http://www.cownew.com/newpeng/  

轉載請保留此信息 

     有一些插件會自動將需要的jar包自動設置到構建路徑上,比如使用WTP的新建向導新建web項目的時候就會把web開發需要的jar包自動放入項目的構建路徑,使用PDE的“將項目轉換為插件項目”功能后項目的構建路徑中就增加了插件依靠項的庫。我這里來演示一下其實現:
在這個例子中,我們想要做一個“為項目添加lUCene支持”的功能,用戶在項目上點擊右鍵,選擇菜單中的“為項目添加lucene支持”以后,插件把lucene的jar包和源碼包拷貝到項目的lib目錄下,并且將jar包加入構建路徑。如下圖:
這是增加lucene支持前的項目結構:
 
用戶在項目上點擊右鍵,選擇菜單中的“為項目添加lucene支持”后的項目結構
 
這是工程構建路徑
 
①新建一個插件工程,并將JDT相關的依靠項加入。
②添加一個“org.eclipse.ui.popupMenus”的擴展點,假如不熟悉怎么添加,可以使用插件向導中的“彈出菜單”向導。
需要注重contribution的配置, 
此插件只針對java項目才起作用,因此“objectClass”中填入“org.eclipse.jdt.core.IJavaPRoject”;
adaptable選擇“true”(后邊講解為什么);
假如是用向導生成的那么請記得清空“nameFilter”。
③下面是核心類ActionAddLucene 的實現代碼
public class ActionAddLucene implements IObjectActionDelegate
{
 private static final String FILESEPARATOR = System.getProperty("file.separator","/");
 private static final String LUCENESRCJAR = "lucene-1.4.3-src.jar";
 private static final String LUCENEJAR = "lucene-1.4.3.jar";
 private static final String LIB = "lib";
 private static final String RESOUCELIB = "resoucelib";
 private IStructuredSelection structSelection;

 public ActionAddLucene()
 {
  super();
 }

 public void setActivePart(IAction action, IWorkbenchPart targetPart)
 {
 }

 public void run(IAction action)
 {
  Object selectObj = structSelection.getFirstElement();
  if (selectObj instanceof IProject)
  {
   IProject project = (IProject) selectObj;
   IJavaProject javaProject = JavaCore.create(project);
   IClasspathEntry[] oldPaths = javaProject.readRawClasspath();
   IClasspathEntry luceneLibEntry = JavaCore.newLibraryEntry(project
     .getFile(LIB + FILESEPARATOR + LUCENEJAR).getFullPath(), project
     .getFile(LIB + FILESEPARATOR + LUCENESRCJAR).getFullPath(), null,
     false);  
   
   if(classPathExists(oldPaths,luceneLibEntry))
   {
    return;
   }

   URL luceneLib = Activator.getDefault().getBundle().getEntry(
     RESOUCELIB + FILESEPARATOR + LUCENEJAR);
   URL luceneSrc = Activator.getDefault().getBundle().getEntry(
     RESOUCELIB + FILESEPARATOR + LUCENESRCJAR);
   IClasspathEntry[] newPaths = new IClasspathEntry[oldPaths.length + 1];
   System.arraycopy(oldPaths, 0, newPaths, 0, oldPaths.length);

   IFolder libFolder = project.getFolder(LIB);
   if (!libFolder.exists())
   {
    try
    {
     libFolder.create(true, true, null);
    } catch (CoreException e)
    {
     handleException(e);
    }
   }

   copyURLToFile(luceneLib, project, LIB + FILESEPARATOR + LUCENEJAR);
   copyURLToFile(luceneSrc, project, LIB + FILESEPARATOR + LUCENESRCJAR);
   
   newPaths[oldPaths.length] = luceneLibEntry;
   try
   {
    javaProject.setRawClasspath(newPaths, null);
   } catch (JavaModelException e)
   {
    handleException(e);
   }
  }
 }

 private static boolean  classPathExists(IClasspathEntry[] entrys,IClasspathEntry entry)
 {
  for(int i=0,n=entrys.length;i<n;i++)
  {
   if(entrys[i].getPath().equals(entry.getPath()))
   {
    return true;
   }
  }
  return false;
 }
 private static void handleException(Exception e)
 {
  Activator.getDefault().getLog().log(
    new Status(IStatus.ERROR, Activator.PLUGIN_ID, 0, e
      .getMessage(), e));
 }

 private static void copyURLToFile(URL url, IProject project,
   String destFileName)
 {
  InputStream inStream = null;
  try
  {
   inStream = url.openStream();
   IFile file = project.getFile(destFileName);
   if (!file.exists())
   {
    file.create(inStream, true, null);
   }

  } catch (IOException e)
  {
   handleException(e);
  } catch (CoreException e)
  {
   handleException(e);
  } finally
  {
   try
   {
    if (inStream != null)
     inStream.close();
   } catch (IOException e)
   {
    handleException(e);
   }
  }

 }

 public void selectionChanged(IAction action, ISelection selection)
 {
  structSelection = (IStructuredSelection) selection;
 }
}
下面解釋一下代碼中的重點部分:
①IClasspathEntry[] oldPaths = javaProject.readRawClasspath();
讀取項目原有的構建路徑條目。
②      
IClasspathEntry luceneLibEntry = JavaCore.newLibraryEntry(project
     .getFile(LIB + FILESEPARATOR + LUCENEJAR).getFullPath(), project
     .getFile(LIB + FILESEPARATOR + LUCENESRCJAR).getFullPath(),null,
     false);  
這一句構建lucene的jar包。
第一個參數是二進制jar包的位置,我們的二進制jar包的位置為項目路徑下的lib/lucene-1.4.3-src.jar;
第二個參數是jar包對應的源碼包的位置;
第三個參數為源碼包的根路徑,lucene的源碼包的源碼根路徑就是jar包的根路徑,因此我們置此參數為null;
第四個參數表示是否導出,我們置為false;
③URL luceneLib = Activator.getDefault().getBundle().getEntry(RESOUCELIB + FILESEPARATOR + LUCENEJAR);
我們把“lucene-1.4.3.jar”、“lucene-1.4.3-src.jar”放到我們插件的“resoucelib”目錄下,當用戶點擊“為項目添加lucene支持”的時候我們要把這兩個文件拷貝到項目的lib目錄下,因此我們需要首先讀取插件路徑“resoucelib”目錄下的這兩個jar包。
讀取插件路徑下的文件我們使用插件Activator類提供的方法即可,比如:
Activator.getDefault().getBundle().getEntry(“config/my.xml”)
就可以讀取到插件根目錄下的文件“config/my.xml”,返回類型是java.net.URL。
④copyURLToFile(luceneLib, project, LIB + FILESEPARATOR + LUCENEJAR);
Activator.getDefault().getBundle().getEntry讀取到的文件位置是URL類型的,我們需要把這個URL對應的文件拷貝到項目的"lib"下。下面看一下copyURLToFile的主干代碼:
 inStream = url.openStream();
 IFile file = project.getFile(destFileName);
 if (!file.exists())
 {
  file.create(inStream, true, null);
 }

   URL類有一個openStream可以打開文件的輸入流,IFile也有一個接受輸入流的create方法用來創建文件,因此我們只需要把url的輸入流輸出給IFile的create方法即可。
     這里我們也可以由url得到其對應的磁盤上的路徑,也可以得到IFile對應的磁盤上的路徑,然后使用Java IO來進行文件復制操作。但是這樣做不僅代碼數量變多了,而且由于不是使用的Eclipse的資源治理API,會帶來無法自動刷新等問題,因此建議讀者盡量使用Eclipse提供的API來完成功能。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
日本亚洲欧美天堂免费| 中文字幕精品一区二| 日韩三级视频中文字幕| 精人妻一区二区三区| 日韩精品在线网站| 91精品国产自产在线丝袜啪| 国产黄在线看| www.av中文字幕| 国产福利一区二区| 欧美日韩国产首页| 色屁屁一区二区| 国产福利一区二区| 中文字幕精品国产| 欧美激情一区二区在线| 在线观看区一区二| 精品久久久久久综合日本欧美| 日韩国产一区久久| 91久久精品视频| 欧美日韩国产免费| 国产日韩第一页v| 日韩一级免费视频| √新版天堂资源在线资源| 中文字幕乱码在线| 欧美片网站免费| 日韩免费久久| www.三级.com| 中文字幕在线视频精品| 日韩中文字幕亚洲| 国产欧美日韩中文| 国产最新在线| 欧美日本精品| 午夜伊人狠狠久久| 亚洲国产无线乱码在线观看| 欧美日韩一二三四| 精品日韩一区二区三区免费视频| av三级在线播放| 国产久卡久卡久卡久卡视频精品 | 国产一级在线免费观看| 亚洲视频 中文字幕| 亚洲一区导航| 国产成人精品免费久久久久| 91精品国产高清| 影音先锋一区二区资源站| 日韩欧美专区在线| 中文字幕日韩视频| 亚洲欧美韩国综合色| 国产小视频在线| 欧美日韩在线三级| 国产极品嫩模在线视频一区 | 91麻豆精品国产91久久久使用方法 | 日韩精品在线看| 日韩精品福利视频| 99久久婷婷| 综合图区亚洲白拍在线| 日本不卡一区在线| 91精品免费看| 欧美日韩一二三| 亚洲久草视频| 日韩免费高清一区二区| 成人h视频在线观看| 国产福利精品导航| 一区二区三区久久| 美女在线视频一区| 91精品国产全国免费观看| 中文字幕在线官网| 国产一区成人| 日韩欧美中文第一页| 欧美日韩午夜在线| 中文字幕日韩欧美| 亚洲免费观看视频| 99精品一级欧美片免费播放| 日韩在线视频免费观看高清中文| 久久精品夜夜夜夜久久| 亚洲一区精品在线| 91精品国产自产91精品| 亚洲欧洲日韩在线| 国产欧美日韩中文| 欧美日韩国产观看视频| 欧美日韩在线综合| 日韩免费不卡avV| 欧美日韩在线观看成人| 精品在线91| 伊人伊成久久人综合网小说| 国产一卡2卡3卡四卡网站| 在线国产91| 免费高清在线一区| 国产欧美日韩在线播放| 92久久精品| 一本一道综合狠狠老| 免费精品国产自产拍在| 国产一区不卡在线| 在线中文字幕网站| 91精品国产自产在线观看永久∴| 中文字幕欧美亚洲| av午夜在线| 91精品免费看| 日韩精品视频在线免费观看| 日韩中文在线字幕| 欧美日韩一级视频| 午夜国产欧美理论在线播放| 日韩欧美国产免费| 精品欧美久久久| 国产裸舞福利在线视频合集| 精品国产999| 国产一区日韩| 99日韩精品| 国产中文在线视频| 国产乱国产乱300精品| 婷婷综合福利| 国内精品露脸在线视频播放| 精品中文字幕视频| 日韩欧美国产视频| 中文字幕欧美日韩| 日韩中文字幕| 日韩精品视频网| 99精品电影| 欧美日韩午夜精品| 亚洲视频资源在线| 日韩在线视频网| 在线免费播放av| a天堂中文在线官网在线| 影音先锋中文字幕在线观看| 国产欧美第一页| 日韩视频在线观看视频| 91精品国产综合久久久久久 | 刘玥91精选国产在线观看| 欧美一级在线观看| 91精品久久久久久蜜臀| 日韩中文字幕第一页| 欧美 日韩 国产 在线观看| 欧美日韩国产专区| 在线不卡一区二区| 国产区日韩欧美| 欧美亚洲另类制服自拍| 国产一区免费视频| 国产天堂素人系列在线视频| 亚洲永久字幕| 国产亚洲一区字幕| 91精品国产日韩91久久久久久| 欧美日韩高清不卡| 午夜一区二区视频| 在线观看av的网站| 亚洲一区在线观看视频| 欧美专区中文字幕| 一级片在线播放| 尤物av一区二区| 国产福利在线看| 精品国产999| 精品av中文字幕在线毛片| 日韩三级精品电影久久久| 欧美日韩中文字幕在线视频| 欧美中文字幕视频在线观看| 欧美三级网址| 日韩精品在线免费看| 日韩精品视频在线观看网址| 999精品网| 久久99精品久久久久久青青日本| 精品日韩av| 日韩av综合在线观看| 精品国产不卡一区二区| 免费高清视频日韩| 国产亚洲短视频| 日本国产一区| 国产免费电影网站入口| 91精品久久久久久蜜臀| 亚洲免费观看在线观看| 精品久久久网| 日本视频久久久| 蜜桃久久av| 国产自产视频| 日韩三级一区二区| 热久久精品国产| 欧美日韩久久不卡| 日韩欧美中文字幕一区| 欧美成人精品在线| 亚洲高清视频一区| 亚洲一区在线观看视频| 国产欧美日韩精品综合| 国产字幕在线看| 日韩亚洲欧美中文高清在线| 欧美日韩国产首页| 在线日韩中文字幕| 亚洲成av人片一区二区密柚| 国产91久久久久| 国产小视频在线观看| 日韩欧美99| 欧美中文字幕视频| 欧美三级在线播放| 欧美三级日本三级少妇99| 国产日韩精品久久久| 亚洲成年人影院在线| 久久99久久久久| 精品日韩av一区二区| 国产欧美日韩不卡免费| 日韩在线三区| 午夜一区二区视频| 日韩一级在线视频 | 国产三级做爰在线观看| 亚洲国产午夜精品| 中文字幕国产日韩| 狠狠色综合色区| 欧美一级久久久久久久久大| 亚洲一区激情| 欧美在线日韩在线| 最近中文字幕在线中文高清版| 日韩欧美中文字幕视频| 中文字幕在线观看欧美| 福利一区二区| 一区二区三区免费看视频| 91亚洲国产| 欧美日韩精品在线| 日本中文字幕在线观看| 亚洲免费婷婷| 中文字幕亚洲乱码| 中文字幕国产日韩| 午夜亚洲一区| 国产网站av| 五月综合激情日本mⅴ| 久久精品电影| 免费在线观看国产黄| 亚洲综合日韩中文字幕v在线| 精品久久久91| 国产亚洲二区| 91精品啪在线观看国产60岁| 国产黄色精品| 国产农村妇女精品一二区| 日韩黄色在线播放| 91精品国产亚洲| 日韩欧美色综合网站| 在线观看中文字幕一区| 婷婷久久综合九色国产成人| 欧美国产三级| 日韩精品乱码av一区二区| 中文字幕在线导航| 中文字幕欧美日韩在线不卡| 中文字幕第一页在线播放| 国产主播中文字幕| 欧洲精品久久久| 日韩一级二级三级| 国产 日韩 欧美 综合| 亚洲高清视频在线| 91久久久精品| 国产视频一二区| 二区三区不卡不卡视频| 中文字幕在线中文字幕二区| 精品视频www| 日韩精品三级| 日韩中文字幕精品视频| 久草亚洲一区| 最近高清中文在线字幕在线观看1| 久久久精品网| 亚洲.国产.中文慕字在线| 日韩欧美中文字幕一区| 欧美日韩性视频一区二区三区| 日韩不卡一二三区| 亚洲乱码中文字幕| av最新网址| 日韩视频1区| 99在线国产| 国产一区久久| 日韩久久在线| 亚洲福利视频专区| 国产日产一区二区三区| 日韩专区视频网站| 日韩在线观看a| 日韩国产欧美在线视频| 国产成人一二三区| 先锋男人资源站| 免费视频最近日韩| 久久久精品99| 精品婷婷伊人一区三区三| 亚洲一区二区三区精品中文字幕| 亚洲最新免费视频| 国产婷婷色一区二区三区| 免费在线国产| 欧美日韩精品在线| 日韩精品丝袜在线| 日韩精品免费视频一区二区三区| 日韩视频在线观看视频| 国产福利一区二区| 国产一级片网站| 欧美熟妇乱码在线一区| 亚洲高清视频一区| 日韩高清不卡一区| www.91香蕉视频| 国产区在线看| 一区二区三区在线|网站| 国产欧美日韩中文| 国产嫩草影院久久久久| 日韩免费电影网站| 精品国产免费视频| 精品乱人伦一区二区三区| www在线视频| 一区二区不卡视频在线观看| 中文字幕亚洲区| 一区二区在线高清视频| 久久精品在线免费观看| 九一久久久久久| 国产午夜精品久久| 欧美日韩精品欧美日韩精品| 欧美日韩在线视频一区| 欧美日韩中文精品| 91久久中文| 亚洲va韩国va欧美va精品| 99精品一级欧美片免费播放| 91精品国产入口| 国产欧美日韩中文字幕在线| 91精品999| 韩日中文字幕第一页| 亚洲福利在线观看| 欧美亚洲视频在线看网址| 午夜一区二区视频| 色综合天天综合网天天狠天天 | 日韩视频一区| 狠狠色噜噜狠狠狠狠97| 精品国产31久久久久久| 国产 欧美 在线| 91一区二区| 91精品国产乱码久久蜜臀| 午夜国产在线视频| 日韩欧美一级在线播放| 亚洲国产欧美日韩精品| 久久久91精品| 日本精品二区| 久久在线91| 日韩久久在线| 国产日韩av一区二区| 国产黄在线观看| 欧美.日韩.国产.一区.二区| 日韩欧美在线影院| 天堂在线一区二区三区| 亚欧成人精品| 日韩不卡高清视频| 亚洲第一视频网站| 久久精品最新免费国产成人| 中文字幕久久精品| 二区三区不卡不卡视频| 日韩美女视频一区二区在线观看| 国产www.大片在线| 国产婷婷在线观看| 91精品国产高清| 中文字幕综合在线| 午夜国产在线| 国产一卡2卡3卡四卡网站| 日韩视频在线一区二区| 亚洲欧洲日韩在线| 综合激情一区| 国产91久久久久| 黄色视屏免费在线观看| 国产婷婷色一区二区三区| 日韩欧美综合在线| 成人禁用看黄a在线| 综合激情国产一区| 中文字幕日韩高清| 在线综合 亚洲 欧美中文字幕| 老司机久久99久久精品播放免费| 免费精品国产自产拍在| 欧美久久久精品| www.中文字幕在线观看| 精品日韩欧美| 韩日中文字幕第一页| 在线中文免费视频| 欧美国产小视频| 免费视频中文字幕| 欧美国产三级| 日本精品国语自产拍在线观看| 日韩.欧美.亚洲| 久久香蕉av| 国产字幕在线看| 久久精品女人| 精品国产不卡一区二区| 国产香蕉免费精品视频| 国产欧美日韩在线视频| 日本黄色一区二区三区| 婷婷精品进入| 日韩三级精品电影久久久| 欧美日韩高清在线一区| 在线视频三区| 日韩在线中文| 91精品日本| 国产一区深夜福利| 欧美日韩亚洲不卡| 精品乱子伦一区二区| 免费一级欧美在线观看视频| 亚洲综合欧美在线| 欧美日韩午夜在线视频| 国产在线视频不卡| 日本亚洲欧美天堂免费| 亚洲一区不卡在线| 欧美不卡一二三| 国产小视频在线观看免费| 欧美日韩在线综合| 日韩久久精品网| av三级在线观看| 国产不卡在线| 国产一区精品| 91精品在线视频观看| 日韩欧美在线网址| 天堂中文在线视频| 欧美日韩在线精品成人综合网|