package com.wisoft.magicube.codegenerator.popup.actions;
          
          import java.util.ArrayList;
          import java.util.Arrays;
          import java.util.List;
          
          import org.eclipse.core.resources.ICommand;
          import org.eclipse.core.resources.IFolder;
          import org.eclipse.core.resources.IProject;
          import org.eclipse.core.resources.IProjectDescription;
          import org.eclipse.core.resources.IResource;
          import org.eclipse.core.resources.IWorkspace;
          import org.eclipse.core.resources.IWorkspaceRoot;
          import org.eclipse.core.resources.ResourcesPlugin;
          import org.eclipse.core.runtime.CoreException;
          import org.eclipse.core.runtime.IPath;
          import org.eclipse.core.runtime.NullProgressMonitor;
          import org.eclipse.core.runtime.Path;
          import org.eclipse.core.runtime.SubProgressMonitor;
          import org.eclipse.jdt.core.IClasspathEntry;
          import org.eclipse.jdt.core.IJavaProject;
          import org.eclipse.jdt.core.IPackageFragment;
          import org.eclipse.jdt.core.IPackageFragmentRoot;
          import org.eclipse.jdt.core.JavaCore;
          import org.eclipse.jdt.core.JavaModelException;
          import org.eclipse.jdt.ui.PreferenceConstants;
          import org.eclipse.jface.action.IAction;
          import org.eclipse.jface.viewers.ISelection;
          import org.eclipse.ui.IObjectActionDelegate;
          import org.eclipse.ui.IWorkbenchPart;
          
          public class NewJavaProjectAction implements IObjectActionDelegate {
          
          	public void run(IAction action) {
          		// 獲取工作區(qū)
          		IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
          
          		// ///////////////////////////////////創(chuàng)建新項(xiàng)目///////////////////////////
          		final IProject project = root.getProject("xyz");
          		
          		// 設(shè)置工程的位置
          		// 為項(xiàng)目指定存放路徑,默認(rèn)放在當(dāng)前工作區(qū)
          		IPath projectPath = new Path("g:/myplugIn");
          		IWorkspace workspace = root.getWorkspace();
          		final IProjectDescription description = workspace.newProjectDescription(project.getName());
          		description.setLocation(projectPath);
          
          		// 設(shè)置工程標(biāo)記,即為java工程
          		String[] javaNature = description.getNatureIds();
          		String[] newJavaNature = new String[javaNature.length + 1];
          		System.arraycopy(javaNature, 0, newJavaNature, 0, javaNature.length);
          		newJavaNature[javaNature.length] = "org.eclipse.jdt.core.javanature"; // 這個(gè)標(biāo)記證明本工程是Java工程
          		description.setNatureIds(newJavaNature);
          
          		// /////////////////////////////
          		try {
          			NullProgressMonitor monitor = new NullProgressMonitor();
          			project.create(description, monitor);
          			project.open(IResource.BACKGROUND_REFRESH, new SubProgressMonitor(monitor, 1000));
          		} catch (CoreException e) {
          			e.printStackTrace();
          		}
          
          		// 下面代碼只在新建向?qū)У那闆r下才可用
          		/*
          		 * //創(chuàng)建新項(xiàng)目,WorkspaceModifyOperation位于org.eclipse.ui.ide中
          		 * WorkspaceModifyOperation workspaceModifyOperation = new
          		 * WorkspaceModifyOperation() {
          		 * 
          		 * @Override protected void execute(IProgressMonitor monitor) throws
          		 * CoreException, InvocationTargetException, InterruptedException { try
          		 * { monitor.beginTask("", ); project.create(description, monitor);
          		 * 
          		 * if(monitor.isCanceled()){ throw new OperationCanceledException(); }
          		 * 
          		 * project.open(IResource.BACKGROUND_REFRESH, new
          		 * SubProgressMonitor(monitor, )); } catch (Exception e) {
          		 * e.printStackTrace(); } finally{ monitor.done(); } } };
          		 * //接下來調(diào)用IWizard的getContainer().run()方法.
          		 */
          
          		// 轉(zhuǎn)化成java工程
          		IJavaProject javaProject = JavaCore.create(project);
          		// //////////////////////////////////添加JRE庫////////////////////////////
          		try {
          			// 獲取默認(rèn)的JRE庫
          			IClasspathEntry[] jreLibrary = PreferenceConstants.getDefaultJRELibrary();
          			// 獲取原來的build path
          			IClasspathEntry[] oldClasspathEntries = javaProject.getRawClasspath();
          			List list = new ArrayList();
          			list.addAll(Arrays.asList(jreLibrary));
          			list.addAll(Arrays.asList(oldClasspathEntries));
          
          			javaProject.setRawClasspath(list.toArray(new IClasspathEntry[list.size()]), null);
          		} catch (JavaModelException e) {
          			e.printStackTrace();
          		}
          
          		// //////////////////////////////////創(chuàng)建輸出路徑/////////////////////////////
          		IFolder binFolder = javaProject.getProject().getFolder("bin");
          		try {
          			binFolder.create(true, true, null);
          			javaProject.setOutputLocation(binFolder.getFullPath(), null);
          		} catch (CoreException e) {
          			e.printStackTrace();
          		}
          
          		// /////////////////////////設(shè)置Java生成器///////////////////////
          		try {
          			IProjectDescription description2 = javaProject.getProject().getDescription();
          			ICommand command = description2.newCommand();
          			command.setBuilderName("org.eclipse.jdt.core.javabuilder");
          			description2.setBuildSpec(new ICommand[] { command });
          			description2.setNatureIds(new String[] { "org.eclipse.jdt.core.javanature" });
          			javaProject.getProject().setDescription(description2, null);
          		} catch (CoreException e) {
          			e.printStackTrace();
          		}
          
          		// /////////////////////////////創(chuàng)建源代碼文件夾//////////////////////////
          		// ///////////源文件夾和文件夾相似,只是使用PackageFragmentRoot進(jìn)行了封裝////////
          		IFolder srcFolder = javaProject.getProject().getFolder("src");
          		try {
          			srcFolder.create(true, true, null);
          			// this.createFolder(srcFolder);
          			// 創(chuàng)建SourceLibrary
          			IClasspathEntry srcClasspathEntry = JavaCore.newSourceEntry(srcFolder.getFullPath());
          
          			// 得到舊的build path
          			IClasspathEntry[] oldClasspathEntries = javaProject.readRawClasspath();
          
          			// 添加新的
          			List list = new ArrayList();
          			list.addAll(Arrays.asList(oldClasspathEntries));
          			list.add(srcClasspathEntry);
          
          			// 原來存在一個(gè)與工程名相同的源文件夾,必須先刪除
          			IClasspathEntry temp = JavaCore.newSourceEntry(new Path("/xyz"));
          			if (list.contains(temp)) {
          				list.remove(temp);
          			}
          
          			System.out.println(list.size());
          
          			javaProject.setRawClasspath(list.toArray(new IClasspathEntry[list.size()]), null);
          		} catch (CoreException e) {
          			e.printStackTrace();
          		}
          
          		// ///////////////////////////////創(chuàng)建包//////////////////////////
          		// IPackageFragmentRoot packageFragmentRoot = javaProject.getPackageFragmentRoot(javaProject.getResource());
          		//此處得到的src目錄只讀
          
          		try {
          			// 先找指定的源文件夾所在的IPackageFragmentRoot
          			IPackageFragmentRoot packageFragmentRoot = javaProject.findPackageFragmentRoot(new Path("/xyz/src"));
          			// 根據(jù)IPackageFragmentRoot創(chuàng)建IPackageFragment,IPackageFragment就是包了
          			IPackageFragment packageFragment = packageFragmentRoot.createPackageFragment("com.aptech.plugin", true, null);
          
          		// //////////////////////////////////創(chuàng)建Java文件////////////////////////
          			String javaCode = "package com.aptech.plugin;public class HelloWorld{public static void main(String[] args){System.out.println(\"中華人民共和國(guó)\");}}";
          			packageFragment.createCompilationUnit("HelloWorld.java", javaCode, true, new NullProgressMonitor());
          
          		} catch (JavaModelException e) {
          			e.printStackTrace();
          		} catch (Exception e) {
          			e.printStackTrace();
          		}
          	}
          
          
          	public void setActivePart(IAction action, IWorkbenchPart targetPart) {
          	}
          
          
          	public void selectionChanged(IAction action, ISelection selection) {
          	}
          
          }
          


          本文是使用 B3log SoloNoday 進(jìn)行同步發(fā)布的

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 依安县| 贡觉县| 阿合奇县| 五华县| 大埔县| 右玉县| 天祝| 泗洪县| 武功县| 汾西县| 阜阳市| 炎陵县| 万山特区| 景东| 石家庄市| 溧水县| 光泽县| 绥棱县| 太湖县| 亳州市| 遵化市| 霍山县| 阳泉市| 股票| 册亨县| 襄樊市| 宁波市| 武强县| 临武县| 饶河县| 南川市| 肇源县| 都匀市| 历史| 栖霞市| 永寿县| 望都县| 句容市| 台州市| 柘荣县| 茌平县|