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 李赞红 阅读(3872) 评论(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)

相册

技术友情博客

搜索

最新评论

阅读排行榜

评论排行榜