2013-03-08 85 views
5

我嘗試通過首先通過IProject創建Java項目,然後通過使用IFacetedProject將其轉換爲動態Web項目來創建動態Web項目,但只有靜態項目正在創建......這裏是代碼,已經完成了......請幫助我解決這個問題..提前感謝。Eclipse:以編程方式創建動態Web項目

IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); 
IProject project = root.getProject("TESTJDT"); 

     try 
     { 
      project.create(null); 
      project.open(null); 
      IProjectDescription description = project.getDescription(); 
      description.setNatureIds(new String[] { JavaCore.NATURE_ID }); 
      project.setDescription(description, null); 
      IJavaProject javaProject = JavaCore.create(project); 

      IClasspathEntry[] buildPath = { 
      JavaCore.newSourceEntry(project.getFullPath().append("src")), 
      JavaRuntime.getDefaultJREContainerEntry() }; 

      javaProject.setRawClasspath(buildPath,project.getFullPath().append(
      "bin"), null); 

      IFolder folder = project.getFolder("src"); 
      folder.create(true, true, null); 

      IPackageFragmentRoot srcFolder = javaProject.getPackageFragmentRoot(folder); 

      IPackageFragment fragment = srcFolder.createPackageFragment("com.programcreek", true, null); 

      String str = "package com.programcreek;" + "\n" 
      + "public class Test {" + "\n" + " private String name;"+ "\n" + "}"; 

      ICompilationUnit cu = fragment.createCompilationUnit("Test.java", str,false, null); 


      IType type = cu.getType("Test"); 

      type.createField("private String age;", null, true, null); 

      IFacetedProject facetedProject = 
       ProjectFacetsManager.create(project, true, null); 
      IProjectDescription description1 = project.getDescription(); 
      description1.setNatureIds(new String[] 
     {"org.eclipse.jem.workbench.JavaEMFNature", 
     "org.eclipse.jdt.core.javanature", 
     "org.eclipse.wst.common.project.facet.core.nature", 
     "org.eclipse.wst.common.modulecore.ModuleCoreNature", 
     "org.eclipse.wst.jsdt.core.jsNature"}); 

      project.setDescription(description1, null); 
      IProjectFacet wstWebFacet = ProjectFacetsManager.getProjectFacet 
       (IModuleConstants.WST_WEB_MODULE); 
      facetedProject.installProjectFacet 
       (wstWebFacet.getDefaultVersion(), null, null); 
+0

如果這裏的API是限制性的,那麼只是一個破解:您可以查看現有動態Web項目的'.project',並且一旦創建,就用這些行以編程方式手動擴展新項目。工作區將在更新時預測此情況。 – 2013-09-13 08:42:32

回答

0

試試這個辦法:

public static IProject getWebDataModel(String projName, boolean createDD) throws ExecutionException{ 
    IDataModel dm = DataModelFactory.createDataModel(new SimpleWebFacetProjectCreationDataModelProvider()); 
    dm.setProperty(IFacetProjectCreationDataModelProperties.FACET_PROJECT_NAME, projName); 

    FacetDataModelMap facetMap = (FacetDataModelMap) dm.getProperty(IFacetProjectCreationDataModelProperties.FACET_DM_MAP); 
    IDataModel facetModel = facetMap.getFacetDataModel(IJ2EEFacetConstants.DYNAMIC_WEB); 
    facetModel.setProperty(IFacetDataModelProperties.FACET_VERSION, JavaEEFacetConstants.WEB_25); 

    facetModel.setBooleanProperty(IJ2EEFacetInstallDataModelProperties.GENERATE_DD, createDD); 
    IDataModel javaFacetModel = facetMap.getFacetDataModel(IJ2EEFacetConstants.JAVA); 
    javaFacetModel.setProperty(IFacetDataModelProperties.FACET_VERSION, JavaEEFacetConstants.JAVA_5); 

    IStatus st = dm.getDefaultOperation().execute(new NullProgressMonitor(), null); 
    return st.isOK() ? ResourcesPlugin.getWorkspace().getRoot().getProject(projName) : null; 
} 

您也可以使用受限制類WebFacetProjectCreationDataModelProvider,而不是SimpleWebFacetProjectCreationDataModelProvider,如果你不介意使用非公開的API。