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