700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 代码生成器插件开发---代码生成项目框架的创建(2)

代码生成器插件开发---代码生成项目框架的创建(2)

时间:2024-05-09 07:09:28

相关推荐

代码生成器插件开发---代码生成项目框架的创建(2)

-12-04 21:32:16|分类:Eclipse PDE|字号订阅

在上一篇中,我们已经建立了一个向导想生成项目,这一篇中将介绍怎样在Eclipse透视图中建立一个项目及所需的东西。

首先,我们在向导点击Finish完后,然后生成一个项目,如图:

这里就不多说了,贴出代码出来:

1 /**

2 * @see org.eclipse.jface.wizard.Wizard#performFinish()

3 */

4 public boolean performFinish() {

5 createJavaProject();

6 if (_newProject == null ) {

7 return false ;

8 } else {

9 updatePerspective();

10 selectAndReveal(_newProject);

11 return true ;

12 }

13 }

14

15 /**

16 *创建一个Java项目

17 */

18 public void createJavaProject() {

19 _newProject = createNewProject();

20 IJavaProjectijavaproject = JavaCore.create(_newProject);

21 try {

22 createOutputLocation(ijavaproject);

23 addJavaBuilder(ijavaproject);

24 setClasspath(ijavaproject);

25 _newProject.build(IncrementalProjectBuilder.FULL_BUILD, null );

26 } catch (JavaModelExceptione) {

27 e.printStackTrace();

28 } catch (CoreExceptione) {

29 e.printStackTrace();

30 }

31 }

32

33 /**

34 *创建一个新项目

35 *

36 * @return

37 */

38 private IProjectcreateNewProject() {

39 if (_newProject != null )

40 return _newProject;

41

42 // 得到一个项目的句柄

43 final IProjectnewProjectHandle = _mainPage.getProjectHandle();

44

45 // 得到一个项目的描述

46 IPathnewPath = null ;

47 if ( ! _mainPage.useDefaults())

48 newPath = _mainPage.getLocationPath();

49

50 IWorkspaceworkspace = ResourcesPlugin.getWorkspace();

51 final IProjectDescriptiondescription = workspace

52 .newProjectDescription(newProjectHandle.getName());

53 description.setLocation(newPath);

54

55 // 增加JavaNature,否则在ijavaproject.setOutputLocation这句就会出错

56 addJavaNature(description);

57

58 // 创建一个项目的操作

59 WorkspaceModifyOperationop = new WorkspaceModifyOperation() {

60 protected void execute(IProgressMonitormonitor)

61 throws CoreException {

62 createProject(description,newProjectHandle,monitor);

63 }

64 } ;

65

66 // 运行一个新的项目操作,即会执行op中的execute方法

67 try {

68 getContainer().run( true , true ,op);

69 } catch (InterruptedExceptione) {

70 return null ;

71 } catch (InvocationTargetExceptione) {

72 return null ;

73 }

74

75 _newProject = newProjectHandle;

76

77 return _newProject;

78 }

79

80 /**

81 *增加Java的Nature

82 *

83 * @param iprojectdescription

84 */

85 private void addJavaNature(IProjectDescriptioniprojectdescription) {

86 ArrayListarraylist = new ArrayList();

87 arraylist.addAll(Arrays.asList(iprojectdescription.getNatureIds()));

88 arraylist.add( " org.eclipse.jdt.core.javanature " );

89 iprojectdescription.setNatureIds((String[])arraylist

90 .toArray( new String[arraylist.size()]));

91 }

92

93 /**

94 *创建一个新项目

95 *

96 * @param description

97 * @param projectHandle

98 * @param monitor

99 * @throws CoreException

100 * @throws OperationCanceledException

101 */

102 private void createProject(IProjectDescriptiondescription,

103 IProjectprojectHandle,IProgressMonitormonitor)

104 throws CoreException,OperationCanceledException {

105 try {

106 monitor.beginTask( "" , 2000 );

107

108 projectHandle.create(description, new SubProgressMonitor(monitor,

109 1000 ));

110

111 if (monitor.isCanceled())

112 throw new OperationCanceledException();

113

114 projectHandle.open(IResource.BACKGROUND_REFRESH,

115 new SubProgressMonitor(monitor, 1000 ));

116

117 } finally {

118 monitor.done();

119 }

120 }

121

122 /**

123 *创建输出文件

124 *

125 * @param ijavaproject

126 * @throws JavaModelException

127 * @throws CoreException

128 */

129 private void createOutputLocation(IJavaProjectijavaproject)

130 throws JavaModelException,CoreException {

131 IFolderifolder = ijavaproject.getProject().getFolder( " bin " );

132 createFolder(ifolder);

133 IPathipath = ifolder.getFullPath();

134 ijavaproject.setOutputLocation(ipath, null );

135 }

136

137 /**

138 *增加Java生成器

139 *

140 * @param ijavaproject

141 * @throws CoreException

142 */

143 private void addJavaBuilder(IJavaProjectijavaproject) throws CoreException {

144 IProjectDescriptioniprojectdescription = ijavaproject.getProject()

145 .getDescription();

146 ICommandicommand = iprojectdescription.newCommand();

147 icommand.setBuilderName( " org.eclipse.jdt.core.javabuilder " );

148 iprojectdescription.setBuildSpec( new ICommand[] {icommand} );

149 iprojectdescription

150 .setNatureIds( new String[] { " org.eclipse.jdt.core.javanature " } );

151 ijavaproject.getProject().setDescription(iprojectdescription, null );

152 }

153

154 /**

155 *设置Classpath

156 *

157 * @param ijavaproject

158 * @throws JavaModelException

159 * @throws CoreException

160 */

161 private void setClasspath(IJavaProjectijavaproject)

162 throws JavaModelException,CoreException {

163 ijavaproject.setRawClasspath( new IClasspathEntry[ 0 ], null );

164 addSourceFolders(ijavaproject);

165 addJRELibraries(ijavaproject);

166 addCodeGenLibraries(ijavaproject);

167 }

168

169 /**

170 *增加JRE库

171 *

172 * @param ijavaproject

173 * @throws JavaModelException

174 */

175 private void addJRELibraries(IJavaProjectijavaproject)

176 throws JavaModelException {

177 ArrayListarraylist = new ArrayList();

178 arraylist.addAll(Arrays.asList(ijavaproject.getRawClasspath()));

179 arraylist.addAll(Arrays.asList(PreferenceConstants

180 .getDefaultJRELibrary()));

181 ijavaproject.setRawClasspath((IClasspathEntry[])arraylist

182 .toArray( new IClasspathEntry[arraylist.size()]), null );

183 }

184

185 /**

186 *增加代码生成中所需要的Jar库

187 *

188 * @param ijavaproject

189 * @throws JavaModelException

190 */

191 private void addCodeGenLibraries(IJavaProjectijavaproject)

192 throws JavaModelException {

193 // TODO:添加代码生成项目中所需要的Jar包

194 }

195

196 /**

197 *增加多个源文件目录

198 *

199 * @param ijavaproject

200 * @throws JavaModelException

201 * @throws CoreException

202 */

203 private void addSourceFolders(IJavaProjectijavaproject)

204 throws JavaModelException,CoreException {

205 ArrayListarraylist = new ArrayList();

206 arraylist.addAll(Arrays.asList(ijavaproject.getRawClasspath()));

207 addSourceFolder(ijavaproject,arraylist, " src/java " );

208 addSourceFolder(ijavaproject,arraylist, " src/resource " );

209 ijavaproject.setRawClasspath((IClasspathEntry[])arraylist

210 .toArray( new IClasspathEntry[arraylist.size()]), null );

211 }

212

213 /**

214 *增加源文件目录

215 *

216 * @param ijavaproject

217 * @param arraylist

218 * @param s

219 * @throws CoreException

220 */

221 private void addSourceFolder(IJavaProjectijavaproject,

222 ArrayListarraylist,Strings) throws CoreException {

223 IFolderifolder = ijavaproject.getProject().getFolder(s);

224 createFolder(ifolder);

225 IPackageFragmentRootipackagefragmentroot = ijavaproject

226 .getPackageFragmentRoot(ifolder);

227 arraylist.add(JavaCore.newSourceEntry(ipackagefragmentroot.getPath()));

228 }

229

230 /**

231 *创建一个文件夹

232 *

233 * @param ifolder

234 * @throws CoreException

235 */

236 private void createFolder(IFolderifolder) throws CoreException {

237 IContainericontainer = ifolder.getParent();

238 if (icontainer != null && ! icontainer.exists()

239 && (icontainer instanceof IFolder))

240 createFolder((IFolder)icontainer);

241 ifolder.create( true , true , null );

242 }

243

244 /**

245 * @see org.eclipse.jface.wizard.Wizard#addPages()

246 */

247 public void addPages() {

248 super .addPages();

249 _mainPage = new WizardNewProjectCreationPage( " 海迈平台-代码生成 " );

250 _mainPage.setTitle( " 创建一个代码生成项目框架 " );

251 _mainPage.setDescription( " 创建一个代码生成项目框架 " );

252 addPage(_mainPage);

253 }

254

255 /**

256 *更新Eclipse的透视图

257 */

258 protected void updatePerspective() {

259 try {

260 IWorkbenchPageiworkbenchpage = PlatformUI.getWorkbench()

261 .getActiveWorkbenchWindow().getActivePage();

262 if (iworkbenchpage.findView( " org.eclipse.ui.views.PropertySheet " ) == null )

263 iworkbenchpage.showView( " org.eclipse.ui.views.PropertySheet " );

264 } catch (PartInitExceptionpartinitexception) {

265 partinitexception.printStackTrace();

266 }

267 }

268

269 /**

270 * @param iresource

271 */

272 protected void selectAndReveal(IResourceiresource) {

273 selectAndReveal(iresource,_workbench.getActiveWorkbenchWindow());

274 }

275

276 /**

277 *选择该项目并显示出来

278 *

279 * @param iresource

280 * @param iworkbenchwindow

281 */

282 private void selectAndReveal(IResourceiresource,

283 IWorkbenchWindowiworkbenchwindow) {

284 BasicNewResourceWizard.selectAndReveal(iresource,iworkbenchwindow);

285 }

在创建新项目的时候,要给项目描述类增加一个Java Nature,具体这个Java Nature是什么意思我不太懂。Eclipse里面很多都采用Adopter模式,所以在WorkspaceModifyOperation中的execute方法是创建项目的核心。其他可以参考代码。相信不是很难理解。

友情小贴士:

1.在点击“完成”按钮后,调用PerformFinish方法。

2.创建一个项目的时候,可以根据page来得到Project句柄,再根据ResourcesPlugin.getWorkspace();来得到工作区,由于每个工作区都含有多个不同插件的描述,可以从工作区创建一个项目描述:workspace .newProjectDescription(newProjectHandle.getName());并设置相应的路径(可以从Page中得到),并为项目描述增加一些必要的信息,如JavaNature。真正创建项目: projectHandle.create(description, new SubProgressMonitor(monitor,1000), projectHandle.open(IResource.BACKGROUND_REFRESH,new SubProgressMonitor(monitor, 1000));

3.为项目设置Java编译器,

ICommand icommand = iprojectdescription.newCommand();

icommand.setBuilderName("org.eclipse.jdt.core.javabuilder");

iprojectdescription.setBuildSpec(new ICommand[] { icommand });

4.为项目设置源路径

ArrayList arraylist = new ArrayList();

arraylist.addAll(Arrays.asList(ijavaproject.getRawClasspath()));

addSourceFolder(ijavaproject, arraylist, "src/java");

addSourceFolder(ijavaproject, arraylist, "src/resource");

ijavaproject.setRawClasspath((IClasspathEntry[]) arraylist.toArray(new IClasspathEntry[arraylist.size()]), null);

5.更新透视图

1 IWorkbenchPage iworkbenchpage = PlatformUI.getWorkbench()

2 .getActiveWorkbenchWindow().getActivePage();

3 if (iworkbenchpage.findView("org.eclipse.ui.views.PropertySheet") == null)

4 iworkbenchpage.showView("org.eclipse.ui.views.PropertySheet");

6.显示项目出来

BasicNewResourceWizard.selectAndReveal(iresource, iworkbenchwindow);

原文:http://secyaher./blog/static/389557711493216157/

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。