IntelliJ Idea 플러그 인 개발 에 사용자 정의 라 이브 러 리 추가 (Library)

4206 단어
일부 코드 공학 에 서 는 ivy, maven 라 이브 러 리 파일 관리 도 구 를 사용 하지 않 습 니 다. jar 패 키 지 는 프로젝트 파일 과 함께 두 거나 로 컬 디 렉 터 리 에 존재 한 다음 개발 도 구 를 통 해 가 져 옵 니 다.또 하 나 는 라 이브 러 리 파일 을 미들웨어 에 포장 하고 개발 할 때 도입 해 야 하 며 ivy, maven 으로 의존 관 리 를 하기 불편 하 다 는 것 이다. 이 럴 때 IntelliJ Idea 플러그 인 을 개발 하여 사용자 정의 라 이브 러 리 를 개발 프로젝트 에 자동 으로 추가 해 야 할 수도 있다.
IntelliJ Idea 플러그 인 개발 을 어떻게 진행 하 는 지 참고 하 시기 바 랍 니 다.http://www.jetbrains.org/intellij/sdk/docs/welcome.html
IntelliJ Idea 라 이브 러 리 는 전역 라 이브 러 리, 프로젝트 라 이브 러 리, 모듈 라 이브 러 리 로 나 뉜 다.
  • 전역 라 이브 러 리: 라 이브 러 리 정 보 는 /. 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 getClassRoot(String librariePath){
            File file = new File(librariePath);
            List list = new ArrayList();
            if(file.exists()){
                if(file.isFile()){
                    list.add(file);
                }else{
                    getClassFile(file,list);
                }
            }
            List rltList = new ArrayList();
            for(int i=0;i list){
            if(parent.exists()){
                File[] files = parent.listFiles();
                if(files.length > 0){
                    for(int i=0;i

        //      
        public void addApplicationLibrary(Project project,String libraryName,List 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 , 。

    좋은 웹페이지 즐겨찾기