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
> 

Reply via email to