Github user bbende commented on a diff in the pull request:

    https://github.com/apache/nifi-maven/pull/7#discussion_r240310495
  
    --- Diff: src/main/java/org/apache/nifi/NarMojo.java ---
    @@ -426,12 +479,260 @@
         protected boolean cloneDuringInstanceClassLoading;
     
     
    +    /**
    +     * The {@link RepositorySystemSession} used for obtaining the local 
and remote artifact repositories.
    +     */
    +    @Parameter(defaultValue = "${repositorySystemSession}", readonly = 
true)
    +    private RepositorySystemSession repoSession;
    +
    +
    +    /**
    +     * The {@link ProjectBuilder} used to generate the {@link 
MavenProject} for the nar artifact the dependency tree is being generated for.
    +     */
    +    @Component
    +    private ProjectBuilder projectBuilder;
    +
    +
    +
         @Override
    -    public void execute() throws MojoExecutionException, 
MojoFailureException {
    +    public void execute() throws MojoExecutionException {
             copyDependencies();
    +
    +        try {
    +            generateDocumentation();
    +        } catch (final Throwable t) { // Catch Throwable in case a linkage 
error such as NoClassDefFoundError occurs
    +            getLog().warn("Could not generate extensions' documentation", 
t);
    +        }
    +
             makeNar();
         }
     
    +    private File getExtensionsDocumentationFile() {
    +        final File directory = new File(projectBuildDirectory, 
"META-INF/docs");
    +        return new File(directory, "extension-docs.xml");
    +    }
    +
    +    private void generateDocumentation() throws MojoExecutionException {
    +        getLog().info("Generating documentation for NiFi extensions in the 
NAR...");
    +
    +        // Create the ClassLoader for the NAR
    +        final ExtensionClassLoaderFactory classLoaderFactory = 
createClassLoaderFactory();
    +
    +        final ExtensionClassLoader extensionClassLoader;
    +        try {
    +            extensionClassLoader = 
classLoaderFactory.createExtensionClassLoader();
    +        } catch (final Exception e) {
    +            if (getLog().isDebugEnabled()) {
    +                getLog().debug("Unable to create a ClassLoader for 
documenting extensions. If this NAR contains any NiFi Extensions, those 
extensions will not be documented.", e);
    +            } else {
    +                getLog().warn("Unable to create a ClassLoader for 
documenting extensions. If this NAR contains any NiFi Extensions, those 
extensions will not be documented. " +
    +                    "Enable mvn DEBUG output for more information (mvn 
-X).");
    +            }
    +
    +            return;
    +        }
    +
    +
    +        final File docsFile = getExtensionsDocumentationFile();
    +        createDirectory(docsFile.getParentFile());
    +
    +        final File additionalDetailsDir = new 
File(docsFile.getParentFile(), "additional-details");
    +        createDirectory(additionalDetailsDir);
    +
    +        try (final OutputStream out = new FileOutputStream(docsFile)) {
    +
    +            final XMLStreamWriter xmlWriter = 
XMLOutputFactory.newInstance().createXMLStreamWriter(out, "UTF-8");
    +            try {
    +                xmlWriter.writeStartElement("extensions");
    +
    +                final String nifiApiVersion = 
extensionClassLoader.getNiFiApiVersion();
    +                xmlWriter.writeStartElement("nifiApiVersion");
    +                xmlWriter.writeCharacters(nifiApiVersion);
    +                xmlWriter.writeEndElement();
    +
    +                final Class<?> docWriterClass;
    +                try {
    +                    docWriterClass = 
Class.forName(DOCUMENTATION_WRITER_CLASS_NAME, false, extensionClassLoader);
    --- End diff --
    
    Should we do this before entering the try block on line 542 so that if the 
doc writer class can't be found we won't write anything to the docs file?


---

Reply via email to