Search in sources :

Example 1 with ArchetypeDescriptorXpp3Writer

use of org.apache.maven.archetype.metadata.io.xpp3.ArchetypeDescriptorXpp3Writer in project maven-archetype by apache.

the class FilesetArchetypeCreator method createArchetype.

public void createArchetype(ArchetypeCreationRequest request, ArchetypeCreationResult result) {
    MavenProject project = request.getProject();
    List<String> languages = request.getLanguages();
    List<String> filtereds = request.getFiltereds();
    String defaultEncoding = request.getDefaultEncoding();
    boolean preserveCData = request.isPreserveCData();
    boolean keepParent = request.isKeepParent();
    boolean partialArchetype = request.isPartialArchetype();
    File outputDirectory = request.getOutputDirectory();
    File basedir = project.getBasedir();
    Properties properties = new Properties();
    Properties configurationProperties = new Properties();
    if (request.getProperties() != null) {
        properties.putAll(request.getProperties());
        configurationProperties.putAll(request.getProperties());
    }
    extractPropertiesFromProject(project, properties, configurationProperties, request.getPackageName());
    if (outputDirectory == null) {
        getLogger().debug("No output directory defined, using default: " + DEFAULT_OUTPUT_DIRECTORY);
        outputDirectory = FileUtils.resolveFile(basedir, DEFAULT_OUTPUT_DIRECTORY);
    }
    outputDirectory.mkdirs();
    getLogger().debug("Creating archetype in " + outputDirectory);
    try {
        File archetypePomFile = createArchetypeProjectPom(project, request.getProjectBuildingRequest(), configurationProperties, outputDirectory);
        File archetypeResourcesDirectory = new File(outputDirectory, getTemplateOutputDirectory());
        File archetypeFilesDirectory = new File(archetypeResourcesDirectory, Constants.ARCHETYPE_RESOURCES);
        getLogger().debug("Archetype's files output directory " + archetypeFilesDirectory);
        File archetypeDescriptorFile = new File(archetypeResourcesDirectory, Constants.ARCHETYPE_DESCRIPTOR);
        archetypeDescriptorFile.getParentFile().mkdirs();
        File archetypePostGenerationScript = new File(archetypeResourcesDirectory, Constants.ARCHETYPE_POST_GENERATION_SCRIPT);
        archetypePostGenerationScript.getParentFile().mkdirs();
        if (request.getProject().getBuild() != null && CollectionUtils.isNotEmpty(request.getProject().getBuild().getResources())) {
            for (Resource resource : request.getProject().getBuild().getResources()) {
                File inputFile = new File(resource.getDirectory() + File.separator + Constants.ARCHETYPE_POST_GENERATION_SCRIPT);
                if (inputFile.exists()) {
                    FileUtils.copyFile(inputFile, archetypePostGenerationScript);
                }
            }
        }
        getLogger().debug("Starting archetype's descriptor " + project.getArtifactId());
        ArchetypeDescriptor archetypeDescriptor = new ArchetypeDescriptor();
        archetypeDescriptor.setName(project.getArtifactId());
        archetypeDescriptor.setPartial(partialArchetype);
        addRequiredProperties(archetypeDescriptor, properties);
        // TODO ensure reverseProperties contains NO dotted properties
        Properties reverseProperties = getReversedProperties(archetypeDescriptor, properties);
        // reverseProperties.remove( Constants.GROUP_ID );
        // TODO ensure pomReversedProperties contains NO dotted properties
        Properties pomReversedProperties = getReversedProperties(archetypeDescriptor, properties);
        // pomReversedProperties.remove( Constants.PACKAGE );
        String packageName = configurationProperties.getProperty(Constants.PACKAGE);
        Model pom = pomManager.readPom(FileUtils.resolveFile(basedir, Constants.ARCHETYPE_POM));
        List<String> excludePatterns = configurationProperties.getProperty(Constants.EXCLUDE_PATTERNS) != null ? Arrays.asList(StringUtils.split(configurationProperties.getProperty(Constants.EXCLUDE_PATTERNS), ",")) : Collections.<String>emptyList();
        List<String> fileNames = resolveFileNames(pom, basedir, excludePatterns);
        if (getLogger().isDebugEnabled()) {
            getLogger().debug("Scanned for files " + fileNames.size());
            for (String name : fileNames) {
                getLogger().debug("- " + name);
            }
        }
        List<FileSet> filesets = resolveFileSets(packageName, fileNames, languages, filtereds, defaultEncoding);
        getLogger().debug("Resolved filesets for " + archetypeDescriptor.getName());
        archetypeDescriptor.setFileSets(filesets);
        createArchetypeFiles(reverseProperties, filesets, packageName, basedir, archetypeFilesDirectory, defaultEncoding, excludePatterns);
        getLogger().debug("Created files for " + archetypeDescriptor.getName());
        setParentArtifactId(reverseProperties, configurationProperties.getProperty(Constants.ARTIFACT_ID));
        for (String moduleId : pom.getModules()) {
            String rootArtifactId = configurationProperties.getProperty(Constants.ARTIFACT_ID);
            String moduleIdDirectory = moduleId;
            if (moduleId.indexOf(rootArtifactId) >= 0) {
                moduleIdDirectory = StringUtils.replace(moduleId, rootArtifactId, "__rootArtifactId__");
            }
            getLogger().debug("Creating module " + moduleId);
            ModuleDescriptor moduleDescriptor = createModule(reverseProperties, rootArtifactId, moduleId, packageName, FileUtils.resolveFile(basedir, moduleId), new File(archetypeFilesDirectory, moduleIdDirectory), languages, filtereds, defaultEncoding, preserveCData, keepParent);
            archetypeDescriptor.addModule(moduleDescriptor);
            getLogger().debug("Added module " + moduleDescriptor.getName() + " in " + archetypeDescriptor.getName());
        }
        restoreParentArtifactId(reverseProperties, null);
        restoreArtifactId(reverseProperties, configurationProperties.getProperty(Constants.ARTIFACT_ID));
        createPoms(pom, configurationProperties.getProperty(Constants.ARTIFACT_ID), configurationProperties.getProperty(Constants.ARTIFACT_ID), archetypeFilesDirectory, basedir, pomReversedProperties, preserveCData, keepParent);
        getLogger().debug("Created Archetype " + archetypeDescriptor.getName() + " template pom(s)");
        Writer out = null;
        try {
            out = WriterFactory.newXmlWriter(archetypeDescriptorFile);
            ArchetypeDescriptorXpp3Writer writer = new ArchetypeDescriptorXpp3Writer();
            writer.write(out, archetypeDescriptor);
            getLogger().debug("Archetype " + archetypeDescriptor.getName() + " descriptor written");
        } finally {
            IOUtil.close(out);
        }
        createArchetypeBasicIt(archetypeDescriptor, outputDirectory);
        // Copy archetype integration tests.
        File archetypeIntegrationTestInputFolder = new File(basedir, Constants.SRC + File.separator + "it" + File.separator + "projects");
        File archetypeIntegrationTestOutputFolder = new File(outputDirectory, Constants.SRC + File.separator + Constants.TEST + File.separator + Constants.RESOURCES + File.separator + "projects");
        if (archetypeIntegrationTestInputFolder.exists()) {
            getLogger().info("Copying: " + archetypeIntegrationTestInputFolder.getAbsolutePath() + " into " + archetypeIntegrationTestOutputFolder.getAbsolutePath());
            FileUtils.copyDirectoryStructure(archetypeIntegrationTestInputFolder, archetypeIntegrationTestOutputFolder);
        }
        InvocationRequest internalRequest = new DefaultInvocationRequest();
        internalRequest.setPomFile(archetypePomFile);
        internalRequest.setGoals(Collections.singletonList(request.getPostPhase()));
        if (request.getLocalRepository() != null) {
            internalRequest.setLocalRepositoryDirectory(new File(request.getLocalRepository().getBasedir()));
        }
        InvocationResult invokerResult = invoker.execute(internalRequest);
        if (invokerResult.getExitCode() != 0) {
            if (invokerResult.getExecutionException() != null) {
                throw invokerResult.getExecutionException();
            } else {
                throw new Exception("Invoker process ended with result different than 0!");
            }
        }
    } catch (Exception e) {
        result.setCause(e);
    }
}
Also used : FileSet(org.apache.maven.archetype.metadata.FileSet) DefaultInvocationRequest(org.apache.maven.shared.invoker.DefaultInvocationRequest) InvocationRequest(org.apache.maven.shared.invoker.InvocationRequest) Resource(org.apache.maven.model.Resource) Properties(java.util.Properties) ArchetypeDescriptor(org.apache.maven.archetype.metadata.ArchetypeDescriptor) InvocationResult(org.apache.maven.shared.invoker.InvocationResult) XmlPullParserException(org.codehaus.plexus.util.xml.pull.XmlPullParserException) FileNotFoundException(java.io.FileNotFoundException) TemplateCreationException(org.apache.maven.archetype.exception.TemplateCreationException) IOException(java.io.IOException) ArchetypeDescriptorXpp3Writer(org.apache.maven.archetype.metadata.io.xpp3.ArchetypeDescriptorXpp3Writer) ModuleDescriptor(org.apache.maven.archetype.metadata.ModuleDescriptor) MavenProject(org.apache.maven.project.MavenProject) Model(org.apache.maven.model.Model) DefaultInvocationRequest(org.apache.maven.shared.invoker.DefaultInvocationRequest) File(java.io.File) ArchetypeDescriptorXpp3Writer(org.apache.maven.archetype.metadata.io.xpp3.ArchetypeDescriptorXpp3Writer) Writer(java.io.Writer)

Aggregations

File (java.io.File)1 FileNotFoundException (java.io.FileNotFoundException)1 IOException (java.io.IOException)1 Writer (java.io.Writer)1 Properties (java.util.Properties)1 TemplateCreationException (org.apache.maven.archetype.exception.TemplateCreationException)1 ArchetypeDescriptor (org.apache.maven.archetype.metadata.ArchetypeDescriptor)1 FileSet (org.apache.maven.archetype.metadata.FileSet)1 ModuleDescriptor (org.apache.maven.archetype.metadata.ModuleDescriptor)1 ArchetypeDescriptorXpp3Writer (org.apache.maven.archetype.metadata.io.xpp3.ArchetypeDescriptorXpp3Writer)1 Model (org.apache.maven.model.Model)1 Resource (org.apache.maven.model.Resource)1 MavenProject (org.apache.maven.project.MavenProject)1 DefaultInvocationRequest (org.apache.maven.shared.invoker.DefaultInvocationRequest)1 InvocationRequest (org.apache.maven.shared.invoker.InvocationRequest)1 InvocationResult (org.apache.maven.shared.invoker.InvocationResult)1 XmlPullParserException (org.codehaus.plexus.util.xml.pull.XmlPullParserException)1