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 >>>>>> >>>>>
