<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Java海闊天空

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

    eclipse插件開發:手動創建一個Java工程,只適合你我有緣者

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

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

    代碼未經任何重構和整理,只適合有緣者,嚴禁亂噴!!



      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         // 獲取工作區
     52         IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
     53 
     54         // ///////////////////////////////////創建新項目///////////////////////////
     55         final IProject project = root.getProject("xyz");
     56         // 為項目指定存放路徑,默認放在當前工作區
     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         // 下面代碼只在新建向導的情況下才可用
     84         /*
     85          * //創建新項目,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          * //接下來調用IWizard的getContainer().run()方法.
     99          */
    100 
    101         // 轉化成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         // //////////////////////////////////創建輸出路徑/////////////////////////////
    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         // /////////////////////////////創建源代碼文件夾//////////////////////////
    148         // ///////////源文件夾和文件夾相似,只是使用PackageFragmentRoot進行了封裝////////
    149         IFolder srcFolder = javaProject.getProject().getFolder("src");
    150         try {
    151             srcFolder.create(truetruenull);
    152             // this.createFolder(srcFolder);
    153             // 創建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         // ///////////////////////////////創建包//////////////////////////
    182         // IPackageFragmentRoot packageFragmentRoot =
    183         // javaProject.getPackageFragmentRoot(javaProject.getResource());
    184 
    185         try {
    186             // 先找指定的源文件夾所在的IPackageFragmentRoot
    187             IPackageFragmentRoot packageFragmentRoot = javaProject
    188                     .findPackageFragmentRoot(new Path("/xyz/src"));
    189             // 根據IPackageFragmentRoot創建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         // //////////////////////////////////創建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 李贊紅 閱讀(3878) 評論(2)  編輯  收藏

    評論

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

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

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

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


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


    網站導航:
     

    導航

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

    統計

    常用鏈接

    留言簿(12)

    隨筆檔案(28)

    相冊

    技術友情博客

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 丰满妇女做a级毛片免费观看| 2020国产精品亚洲综合网| 特级aa**毛片免费观看| 国产免费av一区二区三区| 亚洲日本成本人观看| 精品免费久久久久久成人影院| 亚洲国产精品白丝在线观看| 天天影院成人免费观看| 亚洲中文无码av永久| 国产成人无码免费看视频软件| 亚洲一级毛片免费在线观看| 天天拍拍天天爽免费视频| 黑人粗长大战亚洲女2021国产精品成人免费视频 | 成人免费视频观看无遮挡| 亚洲高清有码中文字| 日韩免费观看的一级毛片| 国产成人综合亚洲绿色| 亚洲一区二区三区在线视频| 91在线免费视频| 久久久亚洲AV波多野结衣 | 亚洲av无码专区在线电影| 免费a级毛片大学生免费观看| 丰满亚洲大尺度无码无码专线| 免费一级国产生活片| 国产精品青草视频免费播放| 久久久无码精品亚洲日韩蜜桃| 亚洲大片免费观看| 亚洲AV第一成肉网| 亚洲日韩激情无码一区| 91精品免费高清在线| 亚洲精品中文字幕| 亚洲无线码在线一区观看| 国产免费女女脚奴视频网| 白白色免费在线视频| 亚洲AV无码成人精品区天堂 | 日本特黄a级高清免费大片| CAOPORN国产精品免费视频| 亚洲男人的天堂在线| 日本免费一区尤物| 久久99免费视频| 亚洲人成人伊人成综合网无码 |