2013-03-08 68 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。

相关问题