`
qq123zhz
  • 浏览: 536043 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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方法。

分享到:
评论

相关推荐

    JDT生成代码实例

    首先,我们创建一个`Demo`类,它将用于构建AST并生成代码。在这个类中,`main`方法是整个代码生成的核心。首先,我们创建一个`AST`对象,它是构建所有Java元素的基础。接着,我们创建了一个`CompilationUnit`,它是...

    java动态编译 ,写了一个jsp在页面上编辑java代码,然后servlet动态编译并执行main方法

    Java动态编译是一种技术,允许程序在运行时将源代码转换为字节码并加载到JVM(Java虚拟机)中。这种能力使得Java应用程序能够根据需要编译和执行新的代码,增强了软件的灵活性和可扩展性。在给定的场景中,用户通过...

    JDT简单的实例(两个)

    3. **编写代码分析器**:创建一个新的Java类,如`CodeAnalyzer`,并使用JDT API来解析和检查Java源代码。例如,我们可以检查类中是否存在未使用的变量或方法。 4. **运行插件**:通过Eclipse的插件开发环境(PDE)...

    使用Eclipse调试Java程序代码

    本文将指导您如何使用 Eclipse 调试 Java 程序代码,包括创建 Java 项目、创建 Java 类、运行 Java 程序和调试 Java 程序等步骤。 一、创建 Java 项目 在 Eclipse 中创建 Java 项目的步骤如下: 1. 在导航视图上...

    clicy:使用JDT生成Java文件AST的点格式的Eclipse插件

    首先,使用Eclipse JDT(Java开发工具)生成并解析Abstract语法树,然后将其转换为点格式。 在您的eclipse文件夹中写入了一个包含点格式AST的新文件。 到目前为止,点格式仅包含有关Java代码的基本信息。 例子: ...

    JAVA学习方法与数组

    ### JAVA学习方法与数组 #### 一、Eclipse工具的使用及Java方法和数组 ...此外,还深入探讨了Java中的方法和数组,包括一维数组和二维数组的声明、创建、初始化和应用,为初学者提供了一个全面的学习指南。

    java李兴华学习笔记之Java常用类库

    ### Java李兴华学习笔记之Java常用类库 #### 一、课程介绍及知识点概览 根据提供的资料,“Java李兴华学习笔记之Java常用类库”这份文档来源于北京MLDN软件实训中心的教学资料,主要涵盖了Java编程语言中常用类库...

    关于Java的eclipse入门教程

    在代码编辑器中,选中`main`方法,右键点击选择“运行”-&gt;“Java应用程序”。Eclipse会创建一个新的运行配置,并在控制台输出程序结果。 ### 6. 使用调试器 Eclipse内置的调试器是其强大功能之一。在代码中设置...

    java深度历险.pdf

    此外,Eclipse JDT Core的编译器提供了一种替代方案,它可以独立于Eclipse环境使用,例如在Play框架中用于动态编译Java源代码。 动态生成和执行Java字节码的一个应用场景是处理动态计算。例如,要计算表达式`(3+4)*...

    Java环境配置及Eclipse入门.doc

    一旦Eclipse安装和配置完毕,开发者就可以在其中创建项目,编写、编译、运行和调试Java代码,同时享受代码自动补全、重构、调试等高效开发功能。Eclipse还支持多种其他语言和框架,如JavaScript、Python、Spring等,...

    Eclipse 安装与使用

    2. **编写Java代码**:在新创建的Java文件(例如:“HelloWorld.java”)中编写Java代码。例如,可以编写一个简单的“Hello World!”程序: ```java public class HelloWorld { public static void main(String[]...

    Eclipse AST

    它位于`org.eclipse.jdt.core.dom`包内,提供了强大的功能来帮助开发者解析、生成及修改Java代码。 #### 基本概念 Eclipse AST主要由以下几个核心组件构成: 1. **ASTNode类及其派生类**:这些类用于描述Java源...

    ecpilse 使用笔记

    - 自动生成getter和setter方法:提高编码效率。 - 错误提示与修正建议:使用Ctrl+1快捷键快速修复代码错误。 #### JUnit测试 - **概念介绍**:JUnit是一个流行的Java单元测试框架,它通过执行预先定义的测试用例...

    Android购物网站源代码,安卓商城购物源码,安卓APP源码商业版

    │ ViewMain.java │ ViewShouJi.java │ ViewTuiJian.java │ Welcome.java │ └─服务器端源代码 │ shop.sql │ └─AndroidWeb │ .classpath │ .mymetadata │ .project │ ├─.myeclipse ├─....

    ECLIPSE-PhoneBook

    8. **项目组织**: 在Eclipse中,项目被组织为源代码目录结构,如src/main/java(源代码)、src/main/resources(资源文件)等。良好的项目结构有助于代码的管理和维护。 9. **调试与性能优化**: Eclipse的调试器是...

    android ui设计

    工程名是保存项目的位置,包名遵循Java编程语言的命名规则,活动名是自动生成的类名,通常是Android活动类的子类。程序名是最终应用程序的显示名称。还可以选择默认位置来保存项目生成的其他文件。 自动生成的代码...

    Hello-World

    4. **运行Java程序**:编译成功后,会生成一个 `HelloWorld.class` 文件。通过运行 `java HelloWorld`,你可以看到 "Hello, World!" 在控制台上打印出来。 从 "Hello-World-master" 这个文件夹名来看,这可能是一个...

    Android UI 简介

    #### 四、创建工程项目 - **安装SDK**:首先需要安装Android SDK,并配置好相应的环境变量。 - **安装Eclipse插件(ADT)**:确保Eclipse中安装了ADT插件。 - **更新ADT插件**:定期检查并更新ADT插件至最新版本。 - ...

    j2ee工程迁移到eclipse

    它提供了许多额外的功能和插件支持,例如代码生成工具、数据库连接工具等。 - **Eclipse**:一款开源的集成开发环境,不仅支持Java开发,还支持其他多种编程语言。虽然功能上不如MyEclipse全面,但可以通过安装各种...

Global site tag (gtag.js) - Google Analytics