2013-03-08 14 views
5

まず、IProjectを使用してJavaプロジェクトを作成し、それをIFacetedProjectを使用して動的Webプロジェクトに変換することによって動的Webプロジェクトを作成しようとしましたが、静的プロジェクトのみが作成されています。やったことがあります... plsは私を助けます。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

既存の動的Webプロジェクトの '.project'を調べ、作成した行によってプログラムによってJava自然で新しいプロジェクトを手動で拡張することができます。更新されると、ワークスペースはこれを予期します。 –

答えて

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

あなたは非パブリックAPIを使用することを気にしない場合は、代わりSimpleWebFacetProjectCreationDataModelProviderの制限されたクラスWebFacetProjectCreationDataModelProviderを使用することができます。

関連する問題