public void writeDescriptor()

in maven-plugin-tools-generators/src/main/java/org/apache/maven/tools/plugin/generator/PluginDescriptorFilesGenerator.java [105:205]


    public void writeDescriptor(File destinationFile, PluginToolsRequest request, DescriptorType type)
            throws IOException {
        PluginDescriptor pluginDescriptor = request.getPluginDescriptor();

        if (!destinationFile.getParentFile().exists()) {
            destinationFile.getParentFile().mkdirs();
        }

        String apiVersion = request.getPluginDescriptor().getRequiredMavenVersion();
        boolean isV4 = apiVersion != null && apiVersion.startsWith("4.");

        try (Writer writer = new OutputStreamWriter(new CachingOutputStream(destinationFile), UTF_8)) {
            XMLWriter w = new PrettyPrintXMLWriter(writer, UTF_8.name(), null);

            final String additionalInfo;
            switch (type) {
                case LIMITED_FOR_HELP_MOJO:
                    additionalInfo = " (for help mojo with limited elements)";
                    break;
                case XHTML:
                    additionalInfo = " (enhanced XHTML version (used for plugin:report))";
                    break;
                default:
                    additionalInfo = "";
                    break;
            }
            w.writeMarkup("\n<!-- Generated by maven-plugin-tools " + getVersion() + additionalInfo + "-->\n\n");

            w.startElement("plugin");
            if (isV4) {
                w.addAttribute("xmlns", "http://maven.apache.org/PLUGIN/2.0.0");
                w.addAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
                w.addAttribute(
                        "xsi:location",
                        "http://maven.apache.org/PLUGIN/2.0.0 https://maven.apache.org/xsd/plugin-2.0.0.xsd");
            }

            GeneratorUtils.element(w, "name", pluginDescriptor.getName());

            GeneratorUtils.element(w, "description", pluginDescriptor.getDescription());

            GeneratorUtils.element(w, "groupId", pluginDescriptor.getGroupId());

            GeneratorUtils.element(w, "artifactId", pluginDescriptor.getArtifactId());

            GeneratorUtils.element(w, "version", pluginDescriptor.getVersion());

            GeneratorUtils.element(w, "goalPrefix", pluginDescriptor.getGoalPrefix());

            if (type != DescriptorType.LIMITED_FOR_HELP_MOJO) {
                GeneratorUtils.element(w, "isolatedRealm", String.valueOf(pluginDescriptor.isIsolatedRealm()));

                GeneratorUtils.element(
                        w, "inheritedByDefault", String.valueOf(pluginDescriptor.isInheritedByDefault()));

                if (pluginDescriptor instanceof ExtendedPluginDescriptor) {
                    ExtendedPluginDescriptor extPluginDescriptor = (ExtendedPluginDescriptor) pluginDescriptor;
                    if (StringUtils.isNotBlank(extPluginDescriptor.getRequiredJavaVersion())) {
                        GeneratorUtils.element(w, "requiredJavaVersion", extPluginDescriptor.getRequiredJavaVersion());
                    }
                }
                if (StringUtils.isNotBlank(pluginDescriptor.getRequiredMavenVersion())) {
                    GeneratorUtils.element(w, "requiredMavenVersion", pluginDescriptor.getRequiredMavenVersion());
                }
            }

            w.startElement("mojos");

            final JavadocLinkGenerator javadocLinkGenerator;
            if (request.getInternalJavadocBaseUrl() != null
                    || (request.getExternalJavadocBaseUrls() != null
                            && !request.getExternalJavadocBaseUrls().isEmpty())) {
                javadocLinkGenerator = new JavadocLinkGenerator(
                        request.getInternalJavadocBaseUrl(),
                        request.getInternalJavadocVersion(),
                        request.getExternalJavadocBaseUrls(),
                        request.getSettings());
            } else {
                javadocLinkGenerator = null;
            }
            if (pluginDescriptor.getMojos() != null) {
                List<MojoDescriptor> descriptors = pluginDescriptor.getMojos();

                PluginUtils.sortMojos(descriptors);

                for (MojoDescriptor descriptor : descriptors) {
                    processMojoDescriptor(descriptor, w, type, javadocLinkGenerator, isV4);
                }
            }

            w.endElement();

            if (!isV4 && type != DescriptorType.LIMITED_FOR_HELP_MOJO) {
                GeneratorUtils.writeDependencies(w, pluginDescriptor);
            }

            w.endElement();

            writer.flush();
        }
    }