`

使用代码生成插件工程,脱离eclipse本身的新建工程向导(1)

 
阅读更多
    第一步,新建一个普通的Java工程。在网上,我找到了网友们的实现,经过测试是能正常使用的。
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.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;

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

		// 创建新项目
		final IProject project = root.getProject(projectName);

		// 设置工程的位置
		// 为项目指定存放路径,默认放在当前工作区
		// IPath projectPath = new Path("");//自己设置
		IWorkspace workspace = root.getWorkspace();
		final IProjectDescription description = workspace
				.newProjectDescription(project.getName());
		description.setLocation(null);

		// 设置工程标记,即为java工程
		String[] javaNature = description.getNatureIds();
		String[] newJavaNature = new String[javaNature.length + 1];
		System.arraycopy(javaNature, 0, newJavaNature, 0, javaNature.length);
		newJavaNature[javaNature.length] = JavaCore.NATURE_ID; // 这个标记证明本工程是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();
		}

		// 转化成java工程
		IJavaProject javaProject = JavaCore.create(project);
		// 添加JRE库
		try {
			// 获取默认的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((IClasspathEntry[]) list
					.toArray(new IClasspathEntry[list.size()]), null);
		} catch (JavaModelException e) {
			e.printStackTrace();
		}

		// 创建输出路径
		IFolder binFolder = javaProject.getProject().getFolder("bin");
		try {
			binFolder.create(true, true, null);
			javaProject.setOutputLocation(binFolder.getFullPath(), null);
		} catch (CoreException e) {
			e.printStackTrace();
		}

		// 设置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();
		}

		// 创建源代码文件夹
		// 源文件夹和文件夹相似,只是使用PackageFragmentRoot进行了封装
		IFolder srcFolder = javaProject.getProject().getFolder("src");
		try {
			srcFolder.create(true, true, null);
			// 创建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);

			// 原来存在一个与工程名相同的源文件夹,必须先删除
			IClasspathEntry temp = JavaCore.newSourceEntry(new Path("/"
					+ projectName));
			if (list.contains(temp)) {
				list.remove(temp);
			}

			javaProject.setRawClasspath((IClasspathEntry[]) list
					.toArray(new IClasspathEntry[list.size()]), null);
		} catch (CoreException e) {
			e.printStackTrace();
		}

		// ///////////////////////////////创建包//////////////////////////
		// IPackageFragmentRoot packageFragmentRoot =
		// javaProject.getPackageFragmentRoot(javaProject.getResource());
		// 此处得到的src目录只读

		try {
			// 先找指定的源文件夹所在的IPackageFragmentRoot
			IPackageFragmentRoot packageFragmentRoot = javaProject
					.findPackageFragmentRoot(new Path("/" + projectName
							+ "/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(\"中华人民共和国\");}}";
			packageFragment.createCompilationUnit("HelloWorld.java", javaCode,
					true, new NullProgressMonitor());

		} catch (JavaModelException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
分享到:
评论

相关推荐

    Eclipse代码生成器插件开发

    在本节中,我们探讨了Eclipse代码生成器插件开发的相关知识点,包括插件开发基本概念、Wizard向导制作、plugin.xml文件、Wizard类、新建项目向导和自定义Wizard页面等。这些知识点对于开发Eclipse插件非常重要,了解...

    java工程脱离eclipse运行

    Java工程脱离Eclipse运行是指将Java工程从Eclipse中独立出来,生成一个可以独立运行的JAR包。下面是实现这一过程的详细步骤: 1. 选择要导出的项目,右键点击选择“导出” 2. 在弹出的框中选中“jar 文件” 3. 选择...

    eclipse代码行数统计插件

    在Eclipse中,安装和使用代码行数统计插件非常简单。首先,用户需要打开"Windows"菜单,然后选择"Show View",接着在弹出的子菜单中找到"Other"选项。在"Other"对话框中,你可以搜索与代码统计相关的插件,比如"PMD...

    mybatis-generator eclipse自动生成代码插件离线安装包

    Eclipse是广受欢迎的Java集成开发环境,而`mybatis-generator eclipse自动生成代码插件离线安装包`则是为了让开发者在没有网络连接的情况下也能在Eclipse中安装并使用MBG。 安装MBG插件的过程分为以下几个步骤: 1...

    统计代码行数的Eclipse插件

    使用Eclipse插件进行代码行数统计通常有以下步骤: 1. 安装插件:首先,你需要将这个名为"LineCount"的压缩包导入到Eclipse中。这可以通过Eclipse的“Help”菜单 -> "Install New Software" -> "Add"来完成,然后...

    eclipse android 代码生成插件源码

    通过学习这个插件的源码,开发者不仅可以提高自己的编程效率,还能深入理解Android插件开发,包括Eclipse插件API的使用、XML解析、代码生成等技术。这对于提升个人技能和理解Android生态系统的底层机制有着积极的...

    mybatis自动生成代码 eclipse插件

    MyBatis Generator(MBG)是一款强大的Eclipse插件,专为简化数据库操作而设计,它能够自动根据数据库表结构生成Java实体类、Mapper接口及XML配置文件等,极大地提升了开发效率。在Java Web开发中,MyBatis ...

    eclipse插件生成ssh框架

    eclipse插件生成ssh框架和ssi框架

    eclipse的mybatis逆向工程生成插件

    标题中的"eclipse的mybatis逆向工程生成插件"指的是将Mybatis Generator集成到Eclipse中,以方便开发者快速生成基于数据库表结构的Java代码。逆向工程通常是指从现有数据库结构出发,自动生成与之对应的源代码,使得...

    Eclipse插件之UML反向类图生成工具

    2. 找到并选择适合的UML反向工程插件,如“GenMyModel”、“Eclipse UML2 Tools”等。 3. 按照提示进行安装,可能需要重启Eclipse以使插件生效。 4. 安装完成后,可以在Eclipse的“Package Explorer”或“Project ...

    eclipse插件mybatis逆向生成插件MyBatis Generator

    它极大地简化了基于MyBatis框架的数据访问层(DAO)代码编写工作,通过数据库表反向工程实现代码自动化生成。这款插件适用于集成到Eclipse或MyEclipse环境中,帮助开发者快速构建项目。 首先,让我们深入了解一下...

    myBatis代码生成eclipse插件

    单独jar包,myBatis代码生成eclipse插件,拷贝到eclipse的dropins文件夹

    Eclipse代码生成器

    基于Eclipse的RCP插件开发,集成MyBatis的插件代码生成功能,另外使用Freemarker来生成代码,插件绝对原创,目前市面上没有.本人还没公开发布.所以好不好使用了才知道,10分不高.后续会发布的github上.并提供源代码.谢谢...

    基于Eclipse插件的简易代码生成工具 毕业设计 论文

    《基于Eclipse插件的简易代码生成工具》是一篇毕业设计论文,主要探讨了如何利用Eclipse平台开发一款能够自动生成代码的插件。在软件开发过程中,编码工作占据了大量时间,尤其对于重复性高的代码段,手动编写既耗时...

    mybatis-eclipse插件及生成代码说明

    mybatis-eclipse插件及生成代码说明 包含mybatis-eclipse插件、插件的安装说明以及通过一个简单的实例描述如何在eclipse中使用mybatis-eclipse插件自动生成Mybatis相关的model、dao、Mapping等文件。 详见:...

    Eclipse插件内幕-插件开发-如何定制一个向导

    【Eclipse插件内幕-插件开发-如何定制一个向导】 在Eclipse插件开发中,定制向导是创建用户友好且高效的工作流程的关键步骤。向导是一种引导用户逐步完成复杂任务的交互式界面,它能够简化和规范化数据输入过程。在...

    eclipse android代码生成插件(jar文件)

    写android 程序时,经常会使用findViewById方法、实现Parcelable接口,这些代码重复而又繁琐,所以抽空写了一个eclipse插件来生成这些代码。

    springmvc项目代码生成eclipse插件

    eclipse插件,用于mysql数据库表到springmvc项目代码生成,生成代码包括model,dao,service,以及相关配置文件。

Global site tag (gtag.js) - Google Analytics