jdt 创建java工程,生成代码,运行main方法

public static IJavaProject createJavaProject(String projectName) { // 获取工作区
		try {
			IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();

			// ///创建新项目///
			final IProject project = root.getProject("xyz");
			// 为项目指定存放路径,默认放在当前工作区
			IPath projectPath = new Path("c:/myplugIn");

			// 设置工程的位置
			IWorkspace workspace = root.getWorkspace();
			
			IProjectDescription description=null;
			if(project.exists())
				 project.delete(true, null);
			 
				description = workspace.newProjectDescription(project.getName());
				description.setLocation(projectPath);

			// 设置工程标记,即为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"; // 这个标记证明本工程是Java工程
			description.setNatureIds(newJavaNature);

			// /
			NullProgressMonitor monitor = new NullProgressMonitor();
			if(project.exists())
				project.delete(true, null);
			project.create(description, monitor);
			project.open(IResource.BACKGROUND_REFRESH, new SubProgressMonitor(
					monitor, 1000));

			// 转化成java工程
			IJavaProject javaProject = JavaCore.create(project);
			// //添加JRE库
			try {
				// 获取默认的JRE库
				IClasspathEntry[] jreLibrary = PreferenceConstants
						.getDefaultJRELibrary();
				// 获取原来的build path
//				IClasspathEntry[] oldClasspathEntries = javaProject
//						.getRawClasspath();
				List<IClasspathEntry> list = new ArrayList<IClasspathEntry>();
				if(!list.containsAll(Arrays.asList(jreLibrary)))
					list.addAll(Arrays.asList(jreLibrary));
//				if(!list.containsAll(Arrays.asList(oldClasspathEntries)))
//				list.addAll(Arrays.asList(oldClasspathEntries));
				
				javaProject.setRawClasspath(
						list.toArray(new IClasspathEntry[list.size()]), null);
			} catch (JavaModelException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

			// //创建输出路径/
			IFolder binFolder = javaProject.getProject().getFolder("bin");
			if(!binFolder.exists())
				binFolder.create(true, true, null);
			javaProject.setOutputLocation(binFolder.getFullPath(), null);

			// /设置Java生成器///
			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);

			// /创建源代码文件夹//
			// ///源文件夹和文件夹相似,只是使用PackageFragmentRoot进行了封装
			IFolder srcFolder = javaProject.getProject().getFolder("src");
			if(!srcFolder.exists())
				srcFolder.create(true, true, null);
			// this.createFolder(srcFolder);
			// 创建SourceLibrary
			IClasspathEntry srcClasspathEntry = JavaCore
					.newSourceEntry(srcFolder.getFullPath());

			// 得到旧的build path
			IClasspathEntry[] oldClasspathEntries = javaProject
					.readRawClasspath();

			// 添加新的
			List<IClasspathEntry> list = new ArrayList<IClasspathEntry>();
			list.addAll(Arrays.asList(oldClasspathEntries));
			list.add(srcClasspathEntry);

			// 原来存在一个与工程名相同的源文件夹,必须先删除
			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);

			// ///创建包//
			// IPackageFragmentRoot packageFragmentRoot =
			// javaProject.getPackageFragmentRoot(javaProject.getResource());

			// 先找指定的源文件夹所在的IPackageFragmentRoot
			IPackageFragmentRoot packageFragmentRoot = javaProject
					.findPackageFragmentRoot(new Path("/xyz/src"));
			// 根据IPackageFragmentRoot创建IPackageFragment,IPackageFragment就是包了
			IPackageFragment packageFragment = packageFragmentRoot
					.createPackageFragment("com.aptech.plugin", true, null);

			// //创建Java文件
			String javaCode = "package com.aptech.plugin;public class HelloWorld{public static void main(String[] args){System.out.println(\"中华人民共和国\");}}";
			packageFragmentRoot = javaProject.findPackageFragmentRoot(new Path(
					"/xyz/src"));
			packageFragment = packageFragmentRoot
					.getPackageFragment("com.aptech.plugin");
			packageFragment.createCompilationUnit("HelloWorld.java", javaCode,
					true, new NullProgressMonitor());
			
			//
			return javaProject;

		} catch (JavaModelException e) {
			e.printStackTrace();
		} catch (CoreException e) {
			e.printStackTrace();
		}
		return null;

	}

	 
public static void run1(IJavaProject javaProject) {
		try {
			String main = "com.aptech.plugin.HelloWorld";
			// 获取工作区
			 
			IVMInstall vmInstall = JavaRuntime.getVMInstall(javaProject);  
			  if (vmInstall == null)  
			     vmInstall = JavaRuntime.getDefaultVMInstall();  
			  if (vmInstall != null) {  
			     IVMRunner vmRunner = vmInstall.getVMRunner(ILaunchManager.RUN_MODE);  
			     if (vmRunner != null) {  
			        String[] classPath = null;  
			        try {  
			           classPath = JavaRuntime.computeDefaultRuntimeClassPath(javaProject);  
			        } catch (CoreException e) { }  
			        if (classPath != null) {  
			           VMRunnerConfiguration vmConfig =  
			              new VMRunnerConfiguration(main, classPath);  
			           ILaunch launch = new Launch(null, ILaunchManager.RUN_MODE, null);  
			           vmRunner.run(vmConfig, launch, null);  
			        }  
			     }  
			  }  

//			IVMInstall vm = JavaRuntime.getVMInstall(javaProject);
//			if (vm == null)
//				vm = JavaRuntime.getDefaultVMInstall();
//			IVMRunner vmr = vm.getVMRunner(ILaunchManager.RUN_MODE);
//			String[] cp = JavaRuntime
//					.computeDefaultRuntimeClassPath(javaProject);
//			VMRunnerConfiguration config = new VMRunnerConfiguration(main, cp);
//			ILaunch launch = new Launch(null, ILaunchManager.RUN_MODE, null);
//			vmr.run(config, launch, null);
		} catch (CoreException e) {
			e.printStackTrace();
		}

 第一个方法是使用jdt创建一个工程,生成源代码,编译java源文件。

第二个方法是运行main方法。

转载于:https://my.oschina.net/zhenghuazhi/blog/200827

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值