Java海闊天空

          編程是我的生活,但生活不僅僅是編程。

          eclipse插件開發(fā):手動創(chuàng)建一個Java工程,只適合你我有緣者

          這是些用來留作筆記的代碼,只適合有緣者。

          功能包括:
              創(chuàng)建新的java工程
              設置默認的JRE庫
              創(chuàng)建源文件夾
              創(chuàng)建輸出文件夾
              創(chuàng)建包
              創(chuàng)建Java類

          代碼未經(jīng)任何重構(gòu)和整理,只適合有緣者,嚴禁亂噴!!



            1 package javame.model.action;
            2 
            3 import java.util.ArrayList;
            4 import java.util.Arrays;
            5 import java.util.List;
            6 
            7 import org.eclipse.core.resources.ICommand;
            8 import org.eclipse.core.resources.IFolder;
            9 import org.eclipse.core.resources.IProject;
           10 import org.eclipse.core.resources.IProjectDescription;
           11 import org.eclipse.core.resources.IResource;
           12 import org.eclipse.core.resources.IWorkspace;
           13 import org.eclipse.core.resources.IWorkspaceRoot;
           14 import org.eclipse.core.resources.ResourcesPlugin;
           15 import org.eclipse.core.runtime.CoreException;
           16 import org.eclipse.core.runtime.IPath;
           17 import org.eclipse.core.runtime.NullProgressMonitor;
           18 import org.eclipse.core.runtime.Path;
           19 import org.eclipse.core.runtime.SubProgressMonitor;
           20 import org.eclipse.jdt.core.IClasspathEntry;
           21 import org.eclipse.jdt.core.ICompilationUnit;
           22 import org.eclipse.jdt.core.IJavaProject;
           23 import org.eclipse.jdt.core.IPackageFragment;
           24 import org.eclipse.jdt.core.IPackageFragmentRoot;
           25 import org.eclipse.jdt.core.JavaCore;
           26 import org.eclipse.jdt.core.JavaModelException;
           27 import org.eclipse.jdt.ui.PreferenceConstants;
           28 import org.eclipse.jface.action.IAction;
           29 import org.eclipse.jface.viewers.ISelection;
           30 import org.eclipse.text.edits.TextEdit;
           31 import org.eclipse.ui.IWorkbenchWindow;
           32 import org.eclipse.ui.IWorkbenchWindowActionDelegate;
           33 
           34 public class JavaModelAction implements IWorkbenchWindowActionDelegate {
           35     private IWorkbenchWindow window;
           36 
           37     @Override
           38     public void dispose() {
           39         // TODO Auto-generated method stub
           40 
           41     }
           42 
           43     @Override
           44     public void init(IWorkbenchWindow window) {
           45         // TODO Auto-generated method stub
           46         this.window = window;
           47     }
           48 
           49     @Override
           50     public void run(IAction action) {
           51         // 獲取工作區(qū)
           52         IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
           53 
           54         // ///////////////////////////////////創(chuàng)建新項目///////////////////////////
           55         final IProject project = root.getProject("xyz");
           56         // 為項目指定存放路徑,默認放在當前工作區(qū)
           57         IPath projectPath = new Path("g:/myplugIn");
           58 
           59         // 設置工程的位置
           60         IWorkspace workspace = root.getWorkspace();
           61         final IProjectDescription description = workspace
           62                 .newProjectDescription(project.getName());
           63         description.setLocation(projectPath);
           64 
           65         // 設置工程標記,即為java工程
           66         String[] javaNature = description.getNatureIds();
           67         String[] newJavaNature = new String[javaNature.length + 1];
           68         System.arraycopy(javaNature, 0, newJavaNature, 0, javaNature.length);
           69         newJavaNature[javaNature.length] = "org.eclipse.jdt.core.javanature"// 這個標記證明本工程是Java工程
           70         description.setNatureIds(newJavaNature);
           71 
           72         // /////////////////////////////
           73         try {
           74             NullProgressMonitor monitor = new NullProgressMonitor();
           75             project.create(description, monitor);
           76             project.open(IResource.BACKGROUND_REFRESH, new SubProgressMonitor(
           77                     monitor, 1000));
           78         } catch (CoreException e) {
           79             // TODO Auto-generated catch block
           80             e.printStackTrace();
           81         }
           82 
           83         // 下面代碼只在新建向?qū)У那闆r下才可用
           84         /*
           85          * //創(chuàng)建新項目,WorkspaceModifyOperation位于org.eclipse.ui.ide中
           86          * WorkspaceModifyOperation workspaceModifyOperation = new
           87          * WorkspaceModifyOperation() {
           88          * 
           89          * @Override protected void execute(IProgressMonitor monitor) throws
           90          * CoreException, InvocationTargetException, InterruptedException { try
           91          * { monitor.beginTask("", 2000); project.create(description, monitor);
           92          * 
           93          * if(monitor.isCanceled()){ throw new OperationCanceledException(); }
           94          * 
           95          * project.open(IResource.BACKGROUND_REFRESH, new
           96          * SubProgressMonitor(monitor, 1000)); } catch (Exception e) {
           97          * e.printStackTrace(); } finally{ monitor.done(); } } };
           98          * //接下來調(diào)用IWizard的getContainer().run()方法.
           99          */
          100 
          101         // 轉(zhuǎn)化成java工程
          102         IJavaProject javaProject = JavaCore.create(project);
          103         // //////////////////////////////////添加JRE庫////////////////////////////
          104         try {
          105             // 獲取默認的JRE庫
          106             IClasspathEntry[] jreLibrary = PreferenceConstants
          107                     .getDefaultJRELibrary();
          108             // 獲取原來的build path
          109             IClasspathEntry[] oldClasspathEntries = javaProject
          110                     .getRawClasspath();
          111             List<IClasspathEntry> list = new ArrayList<IClasspathEntry>();
          112             list.addAll(Arrays.asList(jreLibrary));
          113             list.addAll(Arrays.asList(oldClasspathEntries));
          114 
          115             javaProject.setRawClasspath(list.toArray(new IClasspathEntry[list
          116                     .size()]), null);
          117         } catch (JavaModelException e) {
          118             // TODO Auto-generated catch block
          119             e.printStackTrace();
          120         }
          121 
          122         // //////////////////////////////////創(chuàng)建輸出路徑/////////////////////////////
          123         IFolder binFolder = javaProject.getProject().getFolder("bin");
          124         try {
          125             binFolder.create(truetruenull);
          126             javaProject.setOutputLocation(binFolder.getFullPath(), null);
          127         } catch (CoreException e) {
          128             // TODO Auto-generated catch block
          129             e.printStackTrace();
          130         }
          131 
          132         // /////////////////////////設置Java生成器///////////////////////
          133         try {
          134             IProjectDescription description2 = javaProject.getProject()
          135                     .getDescription();
          136             ICommand command = description2.newCommand();
          137             command.setBuilderName("org.eclipse.jdt.core.javabuilder");
          138             description2.setBuildSpec(new ICommand[] { command });
          139             description2
          140                     .setNatureIds(new String[] { "org.eclipse.jdt.core.javanature" });
          141             javaProject.getProject().setDescription(description2, null);
          142         } catch (CoreException e1) {
          143             // TODO Auto-generated catch block
          144             e1.printStackTrace();
          145         }
          146 
          147         // /////////////////////////////創(chuàng)建源代碼文件夾//////////////////////////
          148         // ///////////源文件夾和文件夾相似,只是使用PackageFragmentRoot進行了封裝////////
          149         IFolder srcFolder = javaProject.getProject().getFolder("src");
          150         try {
          151             srcFolder.create(truetruenull);
          152             // this.createFolder(srcFolder);
          153             // 創(chuàng)建SourceLibrary
          154             IClasspathEntry srcClasspathEntry = JavaCore
          155                     .newSourceEntry(srcFolder.getFullPath());
          156 
          157             // 得到舊的build path
          158             IClasspathEntry[] oldClasspathEntries = javaProject
          159                     .readRawClasspath();
          160 
          161             // 添加新的
          162             List<IClasspathEntry> list = new ArrayList<IClasspathEntry>();
          163             list.addAll(Arrays.asList(oldClasspathEntries));
          164             list.add(srcClasspathEntry);
          165 
          166             // 原來存在一個與工程名相同的源文件夾,必須先刪除
          167             IClasspathEntry temp = JavaCore.newSourceEntry(new Path("/xyz"));
          168             if (list.contains(temp)) {
          169                 list.remove(temp);
          170             }
          171 
          172             System.out.println(list.size());
          173 
          174             javaProject.setRawClasspath(list.toArray(new IClasspathEntry[list
          175                     .size()]), null);
          176         } catch (CoreException e) {
          177             // TODO Auto-generated catch block
          178             e.printStackTrace();
          179         }
          180 
          181         // ///////////////////////////////創(chuàng)建包//////////////////////////
          182         // IPackageFragmentRoot packageFragmentRoot =
          183         // javaProject.getPackageFragmentRoot(javaProject.getResource());
          184 
          185         try {
          186             // 先找指定的源文件夾所在的IPackageFragmentRoot
          187             IPackageFragmentRoot packageFragmentRoot = javaProject
          188                     .findPackageFragmentRoot(new Path("/xyz/src"));
          189             // 根據(jù)IPackageFragmentRoot創(chuàng)建IPackageFragment,IPackageFragment就是包了
          190             IPackageFragment packageFragment = packageFragmentRoot
          191                     .createPackageFragment("com.aptech.plugin"truenull);
          192         } catch (JavaModelException e) {
          193             // TODO Auto-generated catch block
          194             e.printStackTrace();
          195         }
          196 
          197         // //////////////////////////////////創(chuàng)建Java文件////////////////////////
          198         try {
          199             String javaCode = "package com.aptech.plugin;public class HelloWorld{public static void main(String[] args){System.out.println(\"中華人民共和國\");}}";
          200             IPackageFragmentRoot packageFragmentRoot = javaProject
          201                     .findPackageFragmentRoot(new Path("/xyz/src"));
          202             IPackageFragment packageFragment = packageFragmentRoot
          203                     .getPackageFragment("com.aptech.plugin");
          204             packageFragment.createCompilationUnit("HelloWorld.java", javaCode,
          205                     truenew NullProgressMonitor());
          206 
          207         } catch (JavaModelException e) {
          208             // TODO Auto-generated catch block
          209             e.printStackTrace();
          210         } catch (Exception e) {
          211             // TODO Auto-generated catch block
          212             e.printStackTrace();
          213         }
          214 
          215         // ///////////////////////////////格式化java代碼//////////////////
          216     }
          217 
          218     @Override
          219     public void selectionChanged(IAction action, ISelection selection) {
          220         // TODO Auto-generated method stub
          221     }
          222 
          223 }
          224 

          posted on 2010-02-10 01:20 李贊紅 閱讀(3879) 評論(2)  編輯  收藏

          評論

          # re: eclipse插件開發(fā):手動創(chuàng)建一個Java工程,只適合你我有緣者[未登錄] 2010-03-04 15:50 Eason

          這篇文章在好幾個網(wǎng)站看到過~想請問樓主,我創(chuàng)建了源文件之后想直接打開它應該怎么做?我現(xiàn)在使用的是IDE.openEditor(page, file, true);(打開的不是Java文件而是我自定義的一種格式,也是用自己編寫的Editor打開的),目前的效果是只有中間的Editor部分被打開了,而左邊的Project Explorer部分不作任何變化,我想讓左邊部分我的文件變成選中狀態(tài),就和Java新建一個Class一樣,應該怎么弄呢?謝謝  回復  更多評論   

          # re: eclipse插件開發(fā):手動創(chuàng)建一個Java工程,只適合你我有緣者 2010-04-27 15:53 jing

          為什么我 添加JRE庫 的那一塊不成功??  回復  更多評論   


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導航:
           

          導航

          <2010年2月>
          31123456
          78910111213
          14151617181920
          21222324252627
          28123456
          78910111213

          統(tǒng)計

          常用鏈接

          留言簿(12)

          隨筆檔案(28)

          相冊

          技術(shù)友情博客

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 澄城县| 同德县| 剑川县| 东光县| 顺昌县| 潼关县| 黄梅县| 长汀县| 彭州市| 镇安县| 乐都县| 浙江省| 平泉县| 林甸县| 铜陵市| 郧西县| 肥东县| 竹北市| 锡林郭勒盟| 泗阳县| 墨竹工卡县| 井研县| 济南市| 清河县| 隆安县| 垣曲县| 龙山县| 贵溪市| 文山县| 阿城市| 化州市| 突泉县| 余江县| 吴川市| 呼图壁县| 卓资县| 慈溪市| 云和县| 朝阳市| 珲春市| 奈曼旗|