make the scripts directory configurable
This plugin provides support for deriving sling.resourceType Requirements and Capabilities from the file-system layout of scripts. Bundles that get extended by the org.apache.sling.scripting.resolver with these Requirements and Capabilities will have their scripts made available automatically with added versioning and dependency support.
Manually defining the Require-Capability and Provide-Capability bundle headers is error-prone and unnecessary, as they can be derived from the file-system layout required for scripts by the resolver (for the most part).
The plugin scans the javax.script file-system directory and will generate Capabilities for the scripts it finds. It expects the following layout:
javax.script/<sling-resourceType>/<version>/[<METHOD>.]<name>[.<selector>][.<extension>].<script-extension>
From that, it will create an appropriate Provide-Capability (see the “How” section of the scripting resolver) with the following extra assumptions:
name part equals the sling.resourceType or the last part of it, it is assumed to be the name of the main script; otherwise, it is assumed to be a selector;extends it is assumed to be a file containing a single line with the resourceType used for the extends capability attribute followed by a ;version=<version-range>; in this case, the plugin will set the extends attribute to the given resourceType and generate a Require-Capability for that resourceType with the given version range;requires the plugin will read it line by line (assuming the same syntax as for the extends file) and generate a Require-Capability for each line based on the given resourceType and version range.As an example, let's assume the following layout:
javax.scripting/
org.foo/1.0.0
POST.foo.html
This will generate following Provide-Capability:
sling.resourceType;
sling.resourceType="org.foo";
sling.servlet.methods:List<String>=POST;
version:Version="1.0.0"
For a bigger example providing several versions and using an extends file consider the following two projects:
The plugin doesn't currently integrate with the maven-bundle-plugin. The generated Require-Capability and Provide-Capability headers values are simply made available via properties:
${org.apache.sling.scripting.maven.plugin.Provide-Capability}
${org.apache.sling.scripting.maven.plugin.Require-Capability}
However, that makes it reasonable straightforward to use the plugin by just adding it into your build in the prepare-package phase and use the two properties in the manifest writing instructions of another plugin like the maven-bundle-plugin:
<plugin>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.scripting.maven.plugin</artifactId>
<version>0.0.1-SNAPSHOT</version>
<executions>
<execution>
<phase>prepare-package</phase>
<goals>
<goal>metadata</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<instructions>
<Provide-Capability>
${org.apache.sling.scripting.maven.plugin.Provide-Capability}
</Provide-Capability>
<Require-Capability>
osgi.extender;filter:="(&(osgi.extender=sling.scripting)(version>=1.0.0)(!(version>=2.0.0)))",
${org.apache.sling.scripting.maven.plugin.Require-Capability}
</Require-Capability>
</instructions>
</configuration>
</plugin>
You can find an example in here.