1. 程式人生 > >IntelliJ Idea外掛開發之新增自定義庫(Library)

IntelliJ Idea外掛開發之新增自定義庫(Library)

在一些程式碼工程沒有用ivy,maven這些庫檔案管理工具,jar包要麼和工程檔案放在一起或是存在本地的目錄中然後通過開發工具匯入。還有一種就是庫檔案打包在中介軟體中,開發時需要引入,不方便用ivy,maven進行依賴管理,這時候可能就需要開發一個IntelliJ Idea外掛自動的加入自定義的庫到開發工程中。

關於如何進行IntelliJ Idea外掛開發請參考 http://www.jetbrains.org/intellij/sdk/docs/welcome.html

IntelliJ Idea庫分為全域性庫,專案庫,模組庫。

  • 全域性庫:庫資訊記錄在<User Home>/.IntelliJIdea/config/options/applicationLibraries.xml,全域性庫對所有專案都可以訪問。
  • 專案庫:庫檔案的類只能在當前專案訪問,庫資訊記錄在專案的*.ipr檔案或是.idea/libraries目錄下的檔案中。
  • 模組庫:庫檔案的類只能在當前模組訪問,庫資訊記錄在模組的*.iml檔案中

包com.intellij.openapi.roots.libraries下面的類提供了專案庫和jars相關的類或是介面。

示例:

定義ClasspathComputer類,獲取要加入庫的jars路徑或是classes路徑。

public class ClasspathComputer {

	// 獲取jar路徑List
    public static List<String> getClassRoot(String librariePath){
        File file = new File(librariePath);
        List<File> list = new ArrayList<File>();
        if(file.exists()){
            if(file.isFile()){
                list.add(file);
            }else{
                getClassFile(file,list);
            }
        }
        List<String> rltList = new ArrayList<String>();
        for(int i=0;i<list.size();i++){
            rltList.add(list.get(i).getAbsolutePath());
        }
        return rltList;
    }
	
	private static void getClassFile(File parent,List<File> list){
        if(parent.exists()){
            File[] files = parent.listFiles();
            if(files.length > 0){
                for(int i=0;i<files.length;i++){
                    File cfile = files[i];
                    if(cfile.isFile()){
                        if(cfile.getName().endsWith(".jar")){
                            list.add(cfile);
                        }
                    }else if(cfile.isDirectory()){
                        getClassFile(cfile,list);
                    }
                }
            }
        }
    }
}

增加庫的方法:

    // 加庫的方法
    public void addApplicationLibrary(Project project,String libraryName,List<String> classesRoots) {
        final LibraryTable.ModifiableModel model = LibraryTablesRegistrar.getInstance().getLibraryTable(project).getModifiableModel();

        LibraryEx library = (LibraryEx) model.getLibraryByName(libraryName);
	// 庫不存在建立新的
        if(library == null){
            library = (LibraryEx) model.createLibrary(libraryName);
        }
	// 庫中已有的jar刪除
        final LibraryEx.ModifiableModelEx libraryModel = library.getModifiableModel();
        String[] classRootUrls = libraryModel.getUrls(OrderRootType.CLASSES);
        for(String classRootURL : classRootUrls){
            libraryModel.removeRoot(classRootURL,OrderRootType.CLASSES);
        }

	// 加入新的jar
        for (String root : classesRoots) {
	    // 注意jar格式jar:{path_to_jar}.jar!/
            if(root.endsWith(".jar")){
                libraryModel.addRoot(VirtualFileManager.constructUrl("jar",root+"!/"), OrderRootType.CLASSES);
            }else{
                libraryModel.addRoot(VirtualFileManager.constructUrl("file",root), OrderRootType.CLASSES);
            }
        }

	// 提交庫變更
        ApplicationManager.getApplication().runWriteAction(new Runnable() {
            @Override
            public void run() {
                libraryModel.commit();
                model.commit();
            }
        });

	// 向專案模組依賴中增加新增的庫
        Module[] modules = ModuleManager.getInstance(project).getModules();
        for(Module module : modules){
            if(ModuleRootManager.getInstance(module).getModifiableModel().findLibraryOrderEntry(library) == null){
                ModuleRootModificationUtil.addDependency(module,library);
            }
        }
    }

最終會在工程的.idea/librarys/目錄下增加自定義庫名的xml檔案。

這裡只是示例,利用庫的操作API結合自己的需求可以開發出實用的功能,在開發團隊中能夠提高團隊的效率。

相關推薦

IntelliJ Idea外掛開發新增定義(Library)

在一些程式碼工程沒有用ivy,maven這些庫檔案管理工具,jar包要麼和工程檔案放在一起或是存在本地的目錄中然後通過開發工具匯入。還有一種就是庫檔案打包在中介軟體中,開發時需要引入,不方便用ivy,maven進行依賴管理,這時候可能就需要開發一個IntelliJ Idea外

009-Ambari二次開發新增定義元件Redis(二)

上一篇我們主要介紹了Ambari新增元件的答題流程並以REDIS為例說明了流程,本篇在上一篇的基礎上,進一步完善說明流程並介紹如何給元件新增metric 掃描二維碼,關注BearData,獲取最新文章 上篇中,我們已經制作出了redis的rpm包,並重新編譯了我們修改後的Ambar

008-Ambari二次開發新增定義元件Redis(一)

Ambari目前支援的元件有HDFS、YARN、HBase、Hive、Pig、ZooKeeper、Sqoop、Storm、Flume、Tez、Oozie、Falcon、Storm、Altas、Knox、Spark、Ranger、Mahout、Kerberos等,已經涵蓋了從大資料應用的

車機開發新增定義

S700平臺即安卓5.1.1系統新增額外的自定義鍵值按鍵: 在Android的原生系統中鍵值預設情況下是92個,從0-91;一般情況下,這些鍵值是夠用的,但是如果想擴充的話,還是需要新增新的鍵值的;像我們做車機專案的,新增新按鍵鍵值太易見了,比如將倒車檢測做成新自定義鍵值按鍵,我們需要到多個

IntelliJ IDEA預設配置Maven新增定義Tomcat步驟

一、Maven\Tomcat配置 二、IDEA配置 ​ 在歡迎頁面,開啟設定 2.1 配置Maven ​ IDEA預設使用自帶的Maven,這裡我們需要配置我們自己下載的Maven ​ 選擇Build->Build Tools->Maven ​

UEditor二次開發新增定義按鈕

需求 現狀描述:目前預覽正文內容只是文字框放大的樣式 優化方向:建議點選預覽可直接預覽門戶介面的樣式 也就是現狀我們呼叫的是Ueditor自帶的預覽功能,而需求中的預覽功能則相當於要我們重寫預覽按鈕 在之前老版本的Ueditor中新增按鈕很麻煩,具體可以參考

CKeditor使用新增定義外掛

首先就是在CKeditor的plugins目錄下新建一個目錄qchoice:  qchoice目錄下的結構如下: 然後, images中如下:  dialogs中如下: 我們先來看plugins.js檔案的內容: (function() {

Idea 項sout一樣新增定義快捷輸入

前言: 將工具使用好,會使我們的工作事半功倍。 其實,實際工作中我們所使用的工具,都包含了大量的使用功能,而我們只使用最基本的就駐足了,不求進取。 idea 新增快捷輸入 像 sout、psvm等快捷輸入,我們可以新增自定義的。舉個簡單的栗子: 我的程式碼中含有大量的異常

IntelliJ idea外掛開發(一)

1.建立新工程點選plantform plugin(什麼也不用選擇),並選擇工程名和工程目錄 2.finish完成建立 3.建立action。在scr下面建立包名,我的為com.dyc.test.然後新增如下action類。 public class TextBoxe

springSecurity新增定義過濾器

        我們知道,springSecurity其實就是將過濾器和aop進行整合。其實我們也可以新增自己的過濾器。        很簡單,配置如下<http use-expressions=

IntelliJ IDEA外掛開發指南(三)

概要 上節介紹幾個開發時常見的介面和類,本節介紹下外掛開發中的一些API。 外掛開發中的一些API 上面說到了一些常見的擴充套件介面,下面看看IDEA提供的一些常用的API介面: ActionPerformed被點選回撥後,會傳入AnActionEven

iOS開發Xcode定義程式碼塊遷移

本文介紹了程式碼塊遷移的過程. 背景:由於最近換了新的mac,所以,要做自定義程式碼塊的遷移. 一.Xcode中的程式碼塊. 二.開啟 Finder,快捷鍵Command +

IntelliJ IDEA設定類程式碼模板定義(註釋)

編輯程式碼的時候一些模板不盡人意,設定一下類生成模板File -- Settings -- Editor -- Code Style -- File and Code Templates主要是修改了註釋/*** ${DESCRIPTION}* @author * @creat

iOS開發UITableView定義Header檢視和定義Footer檢視

//自定義Header檢視 - (nullable UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInte

微信測試號開發定義選單

注意: 1、自定義選單最多包括3個一級選單,每個一級選單最多包含5個二級選單。 2、一級選單最多4個漢字,二級選單最多7個漢字,多出來的部分將會以“...”代替。 3、測試時可以嘗試取消關注公眾賬號後再次關注,則可以看到建立後的效果。 按鈕型別: 1、cli

springboot開發配置定義的錯誤介面和錯誤資訊

如何定製錯誤頁面? (1)在有模板引擎的情況下:在templates資料夾下的error/狀態碼;即將錯誤頁面命名為:錯誤狀態碼.html放在templates資料夾裡面的error資料夾下,發生此狀態碼的錯誤會來到對應的頁面。 頁面可以獲得的資訊: timestamp:時間 status:狀態碼 error

JEPLUSAPP定義插件——JEPLUS軟件快速開發平臺

otto fff 使用 jid editor style img circle ckeditor JEPLUS之APP自定義插件 在JEPLUS中我們可以創建APP,但是創建的APP都是依賴於平臺功能在我們業務中有些需求並不是都要按照平臺

資料檢驗外掛: Validate外掛 新增定義表單驗證

        jQuery.validator.addMethod("ValiPass", function(value, element,params) {         var exp =

Web開發筆記 #08# Jackson組合多個物件的屬性構成JSON(以及新增定義屬性)

參考文件:https://github.com/FasterXML/jackson-databind 關於ObjectMapper的執行緒安全 截自官方文件: 組合多個物件的屬性構成JSON(以及新增自定義屬性) Code: import com.fasterxml.jackson.cor

越獄開發: vlc播放器新增定義播放語速(ios)

緣起 如下圖, 預設的全域性倍速從2到4間沒了, 想設個2.5都要每次聽的時候重新設定, 好麻煩. 1.安裝theos 安裝dpkg, ldid, theos brew install dpkg ldid sudo git clone --recur