[ 
https://issues.apache.org/jira/browse/KARAF-1351?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Brian Topping closed KARAF-1351.
--------------------------------

       Resolution: Not A Problem
    Fix Version/s: 3.0.0

Deep in the bowels of the beast were more clues.  Pruning is accomplished by 
setting a dependency to "provided" scope.  I guess this is all is really 
necessary.

If there's some desire for documentation, please create an issue and assign it 
to me!
                
> Improvements to features-generate-descriptor
> --------------------------------------------
>
>                 Key: KARAF-1351
>                 URL: https://issues.apache.org/jira/browse/KARAF-1351
>             Project: Karaf
>          Issue Type: Improvement
>          Components: karaf-tooling
>    Affects Versions: 3.0.0
>            Reporter: Brian Topping
>             Fix For: 3.0.0
>
>
> In getting familiar with the features-generate-descriptor goal of 
> karaf-maven-plugin, I found some things to be desired with the output. It 
> very much seems to be an improvement over the 2.2.x plugin with the Maven 
> properties filtering, JAXB parsing model, and template merging, but it still 
> appears to be lacking the means to include features in the output instead of 
> bundles.  
> Although I never got it to work fully, some of that functionality did appear 
> to be attempted in the 2.2.x branch. This issue focuses on finding a robust 
> combination of these works.
> As a use case, consider a bundle under development that depends on a specific 
> Aries dependency. Consider further that dependency is already included in an 
> existing feature.xml generated by an external entity and we would like to use 
> it.
> Under the current implementation, both <bundle> and <feature> elements may be 
> included in the template, and a <feature> element could be included in the 
> template that references Aries. But because the processor has no way to 
> interpret the element, it is for all intents ignored. In turn, because the 
> feature is ignored in processing, the transitive closure of the specific 
> Aries dependency is generated into the final feature.xml, which in the most 
> benign case, simply specifies bundles to be loaded which are already loaded 
> by the <feature> from the template. In a degenerate situation, the versions 
> of the dependencies generated into the feature.xml might be mismatched with 
> the <feature> element that was specified (or already loaded by the system), 
> thereby resulting in additional unwanted libraries being loaded (which often 
> leads to "multiple path" errors at bundle resolution).
> With the facilities provided by current versions of Maven, we are able to 
> recover transitive dependencies as a graph rather than a basic list. This 
> will be important so as to prune a dependency analysis as soon as a 
> dependency is found to be a part of a <feature>. But we must know the feature 
> that is desired, and this author does not know if features are resolvable 
> given a path to a dependency or not (assumption is not).
> Therefore, a means to resolve the URLs to features must also be made 
> available to the plugin. In the 2.2.x branch, this was done in later versions 
> by including a POM dependency on the kernel with scope of "provided", and the 
> default configuration for that kernel was read and the features made 
> available for processing. But this does not seem to be helpful in our use 
> case, because Aries is not a part of the features repositories that are 
> included with the base distribution. We need a build-dependent means to 
> specify the collection of features repositories that should be included as a 
> part of the feature resolution process.
> Noting the experience from 2.2.x with "provided" scope dependencies, it seems 
> that the resolution of features should be done in the same manner whereby 
> <dependencyManagement> or other version properties can be used to maintain 
> the version number of an included feature, relying on the scope to make sure 
> they are not otherwise included in the built output.
> An outline of the features processor could (very) roughly take on the 
> following form:
> # On plugin startup, dependencies of the plugin project with "provided" scope 
> dependencies and "features" classifier are collected.
> # For each dependency, a features.xml artifact is loaded and processed with 
> the existing JAXB code, generating a dependency node graph for each feature 
> set.
> # A visitor is applied to the collection of graphs to generate an index of 
> the dependencies across the graphs. This index is used to resolve which 
> feature provides a given dependency.
> # The template features are interpolated and loaded using the existing JAXB.
> # A visitor is applied to the template graph, which pre-populates the 
> template feature nodes with dependencies.
> # Now the visitor for the Macen dependency tree is run.  This visitor is 
> currently smart enough to know not to add a dependency more than once. In 
> addition, the visitor is modified to check the index of dependencies created 
> earlier. If it exists and the version range matches, it is ignored with a 
> message to the debug log.
> This should result in in two distinct behaviors, depending on whether there 
> is a feature element in the template that matches the features supplied with 
> "provided" scope or not. 
> * If there is, the existence of the feature and the bundles it provides means 
> that the runtime linkage will be satisfied (the dependency and it's closure 
> are provided by the feature).  
> * Even if the "provided" scope dependency on the feature is available to the 
> plugin, if it is not supplied in a specific feature in a template, it will be 
> ignored. In that case, the full transitive closure of the dependencies will 
> be listed as they are today.
> In this manner, the versions of the features are manageable by normal Maven 
> practice, the application of those features can be done in a focused manner, 
> and the end result will be features generation with minimized transitive 
> duplication via the use of feature element references.
> If these goals and changes look reasonable, I'll code something up, and this 
> text can eventually be used as a basis for the documentation. 

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to