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