6

我尝试通过首先通过 IProject 创建 java 项目然后使用 IFacetedProject 将其转换为动态 Web 项目来创建动态 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);
4

1 回答 1

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,WebFacetProjectCreationDataModelProvider您也可以使用受限类。SimpleWebFacetProjectCreationDataModelProvider

于 2013-09-18T18:39:46.487 回答