Hi I started to work on a Goal in the Sling Feature Maven Plugin to create and install plain slingosgifeature files into the local Maven repo.
This is what I added to a bundle: <plugin> <groupId>org.apache.sling</groupId> <artifactId>slingfeature-maven-plugin</artifactId> <version>${slingfeature-maven-plugin.version}</version> <extensions>true</extensions> <executions> <execution> <id>analyze</id> <phase>package</phase> <goals> <goal>create-fm-descriptor</goal> </goals> </execution> </executions> </plugin> This will create the an FM descriptor and place it into my local Maven repo. In my launcher module I used the Convert PM to FM to convert Sling and then add the bundle FM descriptor this way: <plugin> <groupId>org.apache.sling</groupId> <artifactId>slingfeature-maven-plugin</artifactId> <version>${slingfeature-maven-plugin.version}</version> <extensions>true</extensions> <configuration> <features>target/fm</features> <generatedFeatures>${basedir}/target/fm</generatedFeatures> </configuration> <executions> <execution> <id>aggregate-base-feature</id> <phase>generate-test-sources</phase> <goals> <goal>aggregate-features</goal> </goals> <configuration> <aggregates> <aggregate> <classifier>example-runtime</classifier> <filesInclude>**/*.json</filesInclude> <artifactsOverrides>org.apache.sling:org.apache.sling.serviceusermapper:LATEST</artifactsOverrides> <configurationOverrides>*=USE_LATEST</configurationOverrides> <includeArtifact> <groupId>${project.groupId}</groupId> <artifactId>wfx-api</artifactId> <version>${project.version}</version> <type>slingosgifeature</type> </includeArtifact> … Then I used the Sling Feature Maven Plugin Launcher goal to launch both Sling and my demo project and both came up just fine. Finally I wanted to add Peregrine CMS into my project which can be done with just this one: <includeArtifact> <groupId>com.peregrine-cms</groupId> <artifactId>com.peregrine-cms.featuremodel.starter</artifactId> <version>1.0.0-SNAPSHOT</version> <classifier>example-runtime</classifier> <type>slingosgifeature</type> </includeArtifact> The same way would Sling be added into my project when the FM descriptor is available. This is what I think a project should look like: - bundle(s): creates FM descriptor and installs it when built - project: creates Project Wide FM Descriptor and install it (Sling, Peregrine CMS etc). For Peregrine CMS this would only create a FM descriptor for its own modules and for example would not include Sling - launcher: takes the projects and modules FM descriptors, aggregates final FM descriptor and then launches it I will go on now and apply this to Sling Modules. As the FM specification does not lay out a grouping feature like the PMs have for Sling 12 we have these options: - Have the Sling FM Starter maintain a list of all FM from the Sling Project. We might want to consider to create a <includeArtifacts/> container that then can set group wide properties like group id, type etc to all its <includeArtifact/> children - Create Group Modules similar to the PMs that just create grouping FM descriptors - Create Group Modules inside the Sling FM Starter As soon as I have more experience with the Sling Feature Maven Plugin and the create-fm-descriptor goal I will commit and push. Cheers - Andy Schaefer > On Nov 19, 2019, at 5:40 PM, Andreas Schaefer <schaef...@me.com.INVALID> > wrote: > > Hi Robert > > Both, we need FM descriptors for single bundles and for groups (ala PMs). > The reason for single bundles is to provide the ability to assemble an > application by cherry picking bundles so that I do not have to wait for a > group to be released. > > - Andy > >> On Nov 19, 2019, at 6:41 AM, Robert Munteanu <romb...@apache.org> wrote: >> >> On Fri, 2019-11-15 at 11:47 -0800, Andreas Schaefer wrote: >>> Hi >>> >>> I started to get the pieces into place for a build up of Peregrine >>> CMS based on Sling 11 using FMs. >>> >>> First I updated the Sling Feature Converter Maven Plugin to install >>> the generated slingosgifeature into my local Maven repo and then use >>> these dependencies to assemble and launch Peregrine. This works fine >>> for most parts (content does not deploy but that is another story). >>> >>> Next step is to install FMs from Bundles into the local Maven repo >>> which will be used for bundles or content bundles like Sling. >>> >>> My question is: is it expected for the developer to write its own >>> slingosgiffeature file or is there a way to generate that from a POM >>> ? >> >> Do you want to generate feature files for individual bundles? I would >> expect that you have a feature file that groups related bundles >> together, similar to what we do with the provisioning model. >> >> Robert >> >>> >>> As far as I can see the Sling Feature Maven Plugin does not provide >>> that. >>> >>> Cheers - Andy >>> >>>> On Nov 11, 2019, at 2:11 AM, Robert Munteanu <romb...@apache.org> >>>> wrote: >>>> >>>> Hi Andreas, >>>> >>>> On Fri, 2019-11-08 at 09:51 -0800, Andreas Schaefer wrote: >>>>> Hi >>>>> >>>>> I am wondering how a Sling FM Starter Module would look like and >>>>> how >>>>> it is used by clients like Peregrine. >>>>> >>>>> It is my assumption that any FM slingosgifeature project will >>>>> install >>>>> that file on release on a public Maven repository like all of our >>>>> Sling Module. >>>>> >>>>> Then the Sling FM Starter Module will select the appropriate >>>>> slingosgifeature files and assemble it into a Sling release >>>>> slingosgifeature which is then also installed on a public Maven >>>>> repo. >>>>> This enables anyone to build the latest Sling instance w/o having >>>>> any >>>>> other Sling Module checked out / built like right now it is done >>>>> in >>>>> PM based Sling Starter. >>>>> >>>>> A customer will then do the same by taking the Sling >>>>> slingosgifeature >>>>> file and assembly it with their own project and external projects >>>>> slingosgifeature files to build the final Sling / Customer >>>>> instance. >>>> >>>> Overall that sounds reasonable to me. The only note that I want to >>>> make >>>> is that since we are doing releases at best once per year, >>>> downstream >>>> projects would either need to depend on SNAPSHOT versions of the >>>> Sling >>>> Starter, or depend on older versions. >>>> >>>> Thanks, >>>> Robert >