为项目自动添加构建路径

文章作者 100test 发表时间 2007:03:14 16:48:17
来源 100Test.Com百考试题网


有一些插件会自动将需要的jar包自动设置到构建路径上,比如使用WTP的新建向导新建web项目的时候就会把web开发需要的jar包自动放入项目的构建路径,使用PDE的“将项目转换为插件项目”功能后项目的构建路径中就增加了插件依赖项的库。我这里来演示一下其实现:
在这个例子中,我们想要做一个“为项目添加lucene支持”的功能,用户在项目上点击右键,选择菜单中的“为项目添加lucene支持”以后,插件把lucene的jar包和源码包拷贝到项目的lib目录下,并且将jar包加入构建路径。如下图:
这是增加lucene支持前的项目结构:

用户在项目上点击右键,选择菜单中的“为项目添加lucene支持”后的项目结构

这是工程构建路径

①新建一个插件工程,并将JDT相关的依赖项加入。
②添加一个“org.eclipse.ui.popupMenus”的扩展点,如果不熟悉怎么添加,可以使用插件向导中的“弹出菜单”向导。
需要注意contribution的配置,
此插件只针对Java项目才起作用,因此“objectClass”中填入“org.eclipse.jdt.core.IJavaProject”;
adaptable选择“true”(后边讲解为什么);
如果是用向导生成的那么请记得清空“nameFilter”。
③下面是核心类ActionAddLucene 的实现代码
public class ActionAddLucene implements IObjectActionDelegate
{
private static final String FILESEPARATOR = System.getProperty("file.separator","/").
private static final String LUCENESRCJAR = "lucene-1.4.3-src.jar".
private static final String LUCENEJAR = "lucene-1.4.3.jar".
private static final String LIB = "lib".
private static final String RESOUCELIB = "resoucelib".
private IStructuredSelection structSelection.

public ActionAddLucene()
{
super().
}

public void setActivePart(IAction action, IWorkbenchPart targetPart)
{
}

public void run(IAction action)
{
Object 0selectObj = structSelection.getFirstElement().
if (0selectObj instanceof IProject)
{
IProject project = (IProject) 0selectObj.
IJavaProject javaProject = JavaCore.create(project).
IClasspathEntry[] oldPaths = javaProject.readRawClasspath().
IClasspathEntry luceneLibEntry = JavaCore.newLibraryEntry(project
.getFile(LIB FILESEPARATOR LUCENEJAR).getFullPath(), project
.getFile(LIB FILESEPARATOR LUCENESRCJAR).getFullPath(), null,
false).

if(classPathExists(oldPaths,luceneLibEntry))
{
return.
}

URL luceneLib = Activator.getDefault().getBundle().getEntry(
RESOUCELIB FILESEPARATOR LUCENEJAR).
URL luceneSrc = Activator.getDefault().getBundle().getEntry(
RESOUCELIB FILESEPARATOR LUCENESRCJAR).
IClasspathEntry[] newPaths = new IClasspathEntry[oldPaths.length 1].
System.arraycopy(oldPaths, 0, newPaths, 0, oldPaths.length).

IFolder libFolder = project.getFolder(LIB).
if (!libFolder.exists())
{
try
{
libFolder.create(true, true, null).
} catch (CoreException e)
{
handleException(e).
}
}

相关文章


Java中正则表达式使用方法详解(三)
Java中正则表达式使用方法详解(二)
为项目自动添加构建路径
Java中正则表达式使用方法详解(一)
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛