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

Reply via email to