2013-03-08 15 views
5

Ho provato a creare un progetto Web dinamico creando prima il progetto java tramite IProject e poi convertendolo in un progetto Web dinamico utilizzando IFacetedProject, ma viene creato solo il progetto statico ... ecco il codice che ho fatto ... pls aiutami con questo..grazie in anticipo.Eclipse: creazione di un progetto Web dinamico a livello di codice

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

solo un hack se l'API è restrittiva qui: è possibile esaminare '.project' di un progetto web dinamico esistente e estendere manualmente il nuovo progetto con java nature a livello di programmazione da tali linee, una volta creato. Lo spazio di lavoro anticiperà questo quando aggiornato. –

risposta

0

Prova questo approccio:

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

È inoltre possibile utilizzare la classe ristretta WebFacetProjectCreationDataModelProvider invece di SimpleWebFacetProjectCreationDataModelProvider se non vi occupate di utilizzare API non pubbliche.

Problemi correlati