I will try to reproduce it (I have a project where I can reproduce the problem) and then fill a JIRA. I hope I can reproduce it again :)
Juan On Fri, 26 Jun 2020 at 09:19, Etienne Jouvin <[email protected]> wrote: > Some update. > > I wanted to reproduce the error in a fresh new project. But no way to have > it again. > So for the moment, I am not able to show an example. > > I will give it a try later. > > Sorry about that > > > Le ven. 19 juin 2020 à 15:48, Bryan Bende <[email protected]> a écrit : > >> I haven't fully evaluated the fix, at a quick glance it seems correct, >> but I'm trying to figure out if something else is not totally correct in >> your poms because many other projects are using the latest NAR plugin and >> not having this issue, so there must be some difference that makes it work >> in some cases. >> >> We have Maven archetypes for the processor and service bundles. I wonder >> if you could compare the resulting projects/poms with yours to see what >> seems different? >> >> >> https://cwiki.apache.org/confluence/display/NIFI/Maven+Projects+for+Extensions >> >> >> On Fri, Jun 19, 2020 at 9:30 AM Etienne Jouvin <[email protected]> >> wrote: >> >>> My parent pom has this as declaration : >>> >>> <parent> >>> <groupId>org.apache.nifi</groupId> >>> <artifactId>nifi-nar-bundles</artifactId> >>> <version>1.11.4</version> >>> </parent> >>> >>> When I studied the maven plugin, I found the following in class >>> org.apache.nifi.extension.definition.extraction.ExtensionClassLoaderFactory.java >>> private String determineProvidedEntityVersion(final Set<Artifact> >>> artifacts, final String groupId, final String artifactId) throws >>> ProjectBuildingException, MojoExecutionException { >>> getLog().debug("Determining provided entities for " + groupId + >>> ":" + artifactId); >>> for (final Artifact artifact : artifacts) { >>> if (artifact.getGroupId().equals(groupId) && >>> artifact.getArtifactId().equals(artifactId)) { >>> return artifact.getVersion(); >>> } >>> } >>> return findProvidedDependencyVersion(artifacts, groupId, >>> artifactId); >>> } >>> In this case, it search artifact in the dependencies. >>> >>> If not found, check from provided dependencies (in fact from artifact >>> that the current artifact depends on, if I well understood) >>> And the function is : >>> private String findProvidedDependencyVersion(final Set<Artifact> >>> artifacts, final String groupId, final String artifactId) { >>> final ProjectBuildingRequest projectRequest = new >>> DefaultProjectBuildingRequest(); >>> projectRequest.setRepositorySession(repoSession); >>> projectRequest.setSystemProperties(System.getProperties()); >>> projectRequest.setLocalRepository(localRepo); >>> for (final Artifact artifact : artifacts) { >>> final Set<Artifact> artifactDependencies = new HashSet<>(); >>> try { >>> final ProjectBuildingResult projectResult = >>> projectBuilder.build(artifact, projectRequest); >>> gatherArtifacts(projectResult.getProject(), >>> artifactDependencies); >>> getLog().debug("For Artifact " + artifact + ", found the >>> following dependencies:"); >>> artifactDependencies.forEach(dep -> >>> getLog().debug(dep.toString())); >>> >>> for (final Artifact dependency : artifactDependencies) { >>> if (dependency.getGroupId().equals(groupId) && >>> dependency.getArtifactId().equals(artifactId)) { >>> getLog().debug("Found version of " + groupId + >>> ":" + artifactId + " to be " + artifact.getVersion()); >>> return artifact.getVersion(); >>> } >>> } >>> } catch (final Exception e) { >>> getLog().warn("Unable to construct Maven Project for " + >>> artifact + " when attempting to determine the expected version of NiFi >>> API"); >>> getLog().debug("Unable to construct Maven Project for " >>> + artifact + " when attempting to determine the expected version of NiFi >>> API", e); >>> } >>> } >>> return null; >>> } >>> >>> And again if I well understood the code, it search in artifact to match >>> the one for specific group and artifact ids, for example nifi-api. >>> But the version returned is not the one from the found artifact, but >>> from the source artifact. >>> >>> So that's why I explicitly set dependencies in the artifact pom to solve >>> temporary the difficulty. >>> >>> In the PR, I made the following change : >>> private String findProvidedDependencyVersion(final Set<Artifact> >>> artifacts, final String groupId, final String artifactId) { >>> final ProjectBuildingRequest projectRequest = new >>> DefaultProjectBuildingRequest(); >>> projectRequest.setRepositorySession(repoSession); >>> projectRequest.setSystemProperties(System.getProperties()); >>> projectRequest.setLocalRepository(localRepo); >>> for (final Artifact artifact : artifacts) { >>> final Set<Artifact> artifactDependencies = new HashSet<>(); >>> try { >>> final ProjectBuildingResult projectResult = >>> projectBuilder.build(artifact, projectRequest); >>> gatherArtifacts(projectResult.getProject(), >>> artifactDependencies); >>> getLog().debug("For Artifact " + artifact + ", found the >>> following dependencies:"); >>> artifactDependencies.forEach(dep -> >>> getLog().debug(dep.toString())); >>> >>> for (final Artifact dependency : artifactDependencies) { >>> if (dependency.getGroupId().equals(groupId) && >>> dependency.getArtifactId().equals(artifactId)) { >>> getLog().debug("Found version of " + groupId + >>> ":" + artifactId + " to be " + dependency.getVersion()); >>> return dependency.getVersion(); >>> } >>> } >>> } catch (final Exception e) { >>> getLog().warn("Unable to construct Maven Project for " + >>> artifact + " when attempting to determine the expected version of NiFi >>> API"); >>> getLog().debug("Unable to construct Maven Project for " >>> + artifact + " when attempting to determine the expected version of NiFi >>> API", e); >>> } >>> } >>> return null; >>> } >>> >>> Do not know if this is the correct fix, I will way the pull request >>> review. >>> >>> Etienne >>> >>> >>> >>> Le ven. 19 juin 2020 à 15:19, Bryan Bende <[email protected]> a écrit : >>> >>>> If you are not using nifi-nar-bundles as your parent (which is fine), >>>> then you should be explicitly setting versions for nifi-api and >>>> nifi-framework-api. >>>> >>>> Otherwise how would it know to use 1.11.4 ? >>>> >>>> >>>> On Fri, Jun 19, 2020 at 9:09 AM Etienne Jouvin <[email protected]> >>>> wrote: >>>> >>>>> Ok, will try to just post simple thing. >>>>> >>>>> The project has the following : >>>>> <project xmlns="http://maven.apache.org/POM/4.0.0" >>>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >>>>> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 >>>>> https://maven.apache.org/xsd/maven-4.0.0.xsd"> >>>>> <modelVersion>4.0.0</modelVersion> >>>>> <parent> >>>>> <groupId>ch.amexio.nifi.transform</groupId> >>>>> <artifactId>nifi-transform-nar-bundles</artifactId> >>>>> <version>0.0.1-SNAPSHOT</version> >>>>> </parent> >>>>> >>>>> <artifactId>nifi-transform-service-api</artifactId> >>>>> <packaging>jar</packaging> >>>>> >>>>> <dependencies> >>>>> <!-- NiFi dependencies. --> >>>>> <dependency> >>>>> <groupId>org.apache.nifi</groupId> >>>>> <artifactId>nifi-api</artifactId> >>>>> </dependency> >>>>> </dependencies> >>>>> </project> >>>>> >>>>> the nar project :: >>>>> >>>>> <project xmlns="http://maven.apache.org/POM/4.0.0" >>>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >>>>> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 >>>>> https://maven.apache.org/xsd/maven-4.0.0.xsd"> >>>>> <modelVersion>4.0.0</modelVersion> >>>>> <parent> >>>>> <groupId>ch.amexio.nifi.transform</groupId> >>>>> <artifactId>nifi-transform-nar-bundles</artifactId> >>>>> <version>0.0.1-SNAPSHOT</version> >>>>> </parent> >>>>> >>>>> <artifactId>nifi-transform-service-api-nar</artifactId> >>>>> <packaging>nar</packaging> >>>>> >>>>> <properties> >>>>> <maven.javadoc.skip>true</maven.javadoc.skip> >>>>> <source.skip>true</source.skip> >>>>> </properties> >>>>> >>>>> <dependencies> >>>>> <!-- Project dependencies. --> >>>>> <dependency> >>>>> <groupId>ch.amexio.nifi.transform</groupId> >>>>> <artifactId>nifi-transform-service-api</artifactId> >>>>> <version>0.0.1-SNAPSHOT</version> >>>>> <scope>compile</scope> >>>>> </dependency> >>>>> >>>>> <!-- NiFi dependencies. --> >>>>> <dependency> >>>>> <groupId>org.apache.nifi</groupId> >>>>> <artifactId>nifi-standard-services-api-nar</artifactId> >>>>> <type>nar</type> >>>>> </dependency> >>>>> </dependencies> >>>>> </project> >>>>> >>>>> It was then in failure. >>>>> What I did, is to change the my parent pom and add the following in >>>>> dependencies >>>>> <dependencies> >>>>> <!-- NiFi dependencies. --> >>>>> <!-- Required for NAR generation. --> >>>>> <dependency> >>>>> <groupId>org.apache.nifi</groupId> >>>>> <artifactId>nifi-api</artifactId> >>>>> </dependency> >>>>> <dependency> >>>>> <groupId>org.apache.nifi</groupId> >>>>> <artifactId>nifi-framework-api</artifactId> >>>>> </dependency> >>>>> </dependencies> >>>>> >>>>> >>>>> By the way, I submit a Pull Request on nifi-maven >>>>> https://github.com/apache/nifi-maven/pull/13 >>>>> With following change : >>>>> https://github.com/apache/nifi-maven/pull/13/files >>>>> >>>>> Etienne >>>>> >>>>> >>>>> >>>>> Le ven. 19 juin 2020 à 13:52, Mike Thomsen <[email protected]> a >>>>> écrit : >>>>> >>>>>> Without seeing your POM(s), it could be several things. Try posting >>>>>> your POMs here or as a GitHub gist. >>>>>> >>>>>> On Fri, Jun 19, 2020 at 3:36 AM Etienne Jouvin < >>>>>> [email protected]> wrote: >>>>>> >>>>>>> Hello all. >>>>>>> >>>>>>> Do not know where to post the message, guide me if I should send to >>>>>>> another mailing list. >>>>>>> A simple summary in first step. >>>>>>> I created a simple project to build a new service. >>>>>>> I extend the nifi-nar-bundles artifact with version 1.11.4. >>>>>>> My project version is currently 0.0.1-SNAPSHOT. >>>>>>> >>>>>>> During NAR generation, it failed for the documentation with message : >>>>>>> org.apache.maven.plugin.MojoExecutionException: Failed to create >>>>>>> Extension Documentation >>>>>>> Caused by: org.apache.maven.plugin.MojoExecutionException: Could not >>>>>>> resolve local dependency org.apache.nifi:nifi-api:jar:0.0.1-SNAPSHOT >>>>>>> >>>>>>> I am currently looking in source code of nifi-maven project, >>>>>>> specially class ExtensionClassLoaderFactory. >>>>>>> >>>>>>> What I do not understand is why it searches for version >>>>>>> 0.0.1-SNAPSHOT on nifi-api, and not the version 1.11.4 >>>>>>> >>>>>>> Let me know if I should discuss about this in another thread. >>>>>>> >>>>>>> Regards >>>>>>> >>>>>>> Etienne >>>>>>> >>>>>>
