2013-03-08 9 views
5

Próbowałem utworzyć dynamiczny projekt WWW, najpierw tworząc projekt java poprzez IProject, a następnie przekształcając go w dynamiczny projekt internetowy za pomocą IFacetedProject, ale tylko statyczny projekt jest tworzony ... tutaj jest kod, który zrobiłem ... pls pomóż mi z tym .. dzięki z góry.Eclipse: Programowanie dynamiczne w sposób programowy

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

po prostu włamać się, jeśli interfejs API jest tutaj restrykcyjny: można zajrzeć do ".project" istniejącego dynamicznego projektu WWW i ręcznie, po utworzeniu, ręcznie rozszerzyć nowy projekt o naturę Java za pomocą tych linii. Obszar roboczy przewiduje to po aktualizacji. –

Odpowiedz

0

Spróbuj tego podejścia:

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; 
} 

Można również użyć zabroniony klasę WebFacetProjectCreationDataModelProvider zamiast SimpleWebFacetProjectCreationDataModelProvider jeśli nie przeszkadza w użyciu API niepublicznych.

Powiązane problemy