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

Roy Teeuwen reassigned SLING-13197:
-----------------------------------

    Assignee: Roy Teeuwen

> Feature Model: detect Bundle-SymbolicName collisions during assembly      
> --------------------------------------------------------------------------
>
>                 Key: SLING-13197
>                 URL: https://issues.apache.org/jira/browse/SLING-13197
>             Project: Sling
>          Issue Type: Improvement
>          Components: Feature Model
>    Affects Versions: Feature Model 2.0.4
>            Reporter: Roy Teeuwen
>            Assignee: Roy Teeuwen
>            Priority: Major
>
> *Context*                                                    
> FeatureBuilder.assemble() deduplicates conflicting bundles by Maven 
> groupId:artifactId via BuilderContext.addArtifactsOverride(). This is fine 
> when the feature file is created through declarations in a pom.xml / maven.
> It stops working when cpconverter is used on a content package and the 
> included bundle was not produced by maven and thus doesn't contain an 
> embedded META-INF/ pom properties. The cpconverter then falls back to 
> deriving coordinates from the OSGi Bundle-SymbolicName.
> Concrete examples I'm hitting this are for example in the aem-groovy-console 
> where i'm trying to set up integration tests for it, using the sling starter 
> 14 feature model and adding the groovy console as extra feature file by first 
> converting it to a feature file:                                              
>                                                           
>  - Sling Starter 14 feature model ships org.ow2.asm:asm-tree:9.9.1. The same 
> jar embedded into a content package and run through cpconverter becomes 
> org.objectweb.asm:tree:9.9.1. Different Maven GAVs, identical OSGi 
> BSN+Bundle-Version. assemble() lets both through, then Felix at install time 
> refuses with Bundle symbolic name and version are not unique: 
> org.objectweb.asm.tree:9.9.1.                                     
>  - Sling Starter 14 feature model ships org.apache.groovy:groovy-xml:4.0.10. 
> The same family of artifacts embedded at version 5.0.5 and run through 
> cpconverter becomes groovy-xml:groovy-xml:5.0.5                               
>           
> *Proposed change*                                                             
>                                                              
> A new opt-in toggle on BuilderContext that enables BSN-collision detection 
> during assemble().
> Behaviour when setOsgiBsnCollisionDetection(true) has been called (no-op 
> otherwise — full backward compatibility):
> After FeatureBuilder.assemble() finishes the existing GAV-merge, a new pass 
> groups the assembled bundles by Bundle-SymbolicName (read from each JAR's 
> manifest). For any group of size ≥ 2 the wildcard {*}:{*}:<rule> entries in 
> BuilderContext.getArtifactOverrides() are consulted:
>   - HIGHEST → keep the bundle with the highest Bundle-Version
>   - LATEST → keep the last bundle in iteration order
>   - FIRST → keep the first
>   - ALL → keep all (effectively disable for this group)
>   - A literal version → keep the bundle whose Bundle-Version matches it
> *Backward compatibility*
> Currently I'm going for default osgiBsnCollisionDetection is false → 
> BSN-comparison is skipped → existing assemblies behave identically. 
> An alternative would be implicit opt-in: detection runs whenever any wildcard 
> {*}:{*}:<rule> override is configured, with no separate toggle.
>  - Pro: zero new API surface; the change is invisible to anyone not using 
> wildcard overrides.
>  - Con: a user who adds {*}:{*}:HIGHEST for normal Maven-GAV clashes would 
> get BSN-collision detection as an unrelated side effect they may not have 
> asked for.
> Will currently go for opt-in, unless everyone is happy with making this the 
> default



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to