Rat comes with a set of predefined license matchers, that can be used some typical licenses. However, they will not always be sufficient. In such cases, you may use a custom license matcher.
A custom license matcher is an implementation of org.apache.rat.analysis.IHeaderMatcher. Suggest that your source files must contain a header like the following:
/** * Yet Another Software License, 1.0 * * Lots of text, specifying the users rights, and whatever ... */
A very easy way to search for such headers would be to scan for the string "Yet Another Software License, 1.0". And here's how you would do that in your POM:
<build> <plugins> ... <plugin> <groupId>org.apache.rat</groupId> <artifactId>apache-rat-plugin</artifactId> <version>0.12</version> <configuration> <licenses> <license implementation="org.apache.rat.analysis.license.SimplePatternBasedLicense"> <licenseFamilyCategory>YASL1</licenseFamilyCategory> <licenseFamilyName>Yet Another Software License (YASL) 1.0</licenseFamilyName> <notes></notes> <patterns> <pattern>Yet Another Software License, 1.0</pattern> </patterns> </license> </licenses> </configuration> </plugin> ... </plugins> </build>
The following terms are used in the example:
licenseFamilyCategory | The license family category is a very short string (exactly 5 characters, preferrably no blanks), which identifies the license. For example, this could be AL20 to identify the Apache License, 2.0. |
licenseFamilyName | The license family name is a longer string, which gives the licenses full name. For example, this could be Apache License, 2.0. |
notes | You might specify additional notes here, like "Dual licensed GPL/MPL". |
patterns | Specifies a set of patterns being searched. The source file is assumed to contain the license header, if at least one of these patterns is found. |
Detecting the license is not enough in many cases as the "new" license may not be considered approved by Rat. In order to make a license approved you provide a custom implementation of org.apache.rat.license.ILicenseFamily. Usually all you need to provide the name of the license, in which case the built-in SimpleLicenseFamily will do.
To continue the example, in order to make the YASL1 license approved you'd use
<build> <plugins> ... <plugin> <groupId>org.apache.rat</groupId> <artifactId>apache-rat-plugin</artifactId> <version>0.12</version> <configuration> <licenses> <license implementation="org.apache.rat.analysis.license.SimplePatternBasedLicense"> <licenseFamilyCategory>YASL1</licenseFamilyCategory> <licenseFamilyName>Yet Another Software License (YASL) 1.0</licenseFamilyName> <notes></notes> <patterns> <pattern>Yet Another Software License, 1.0</pattern> </patterns> </license> </licenses> <licenseFamilies> <licenseFamily implementation="org.apache.rat.license.SimpleLicenseFamily"> <familyName>Yet Another Software License</familyName> </licenseFamily> </licenseFamilies> </configuration> </plugin> ... </plugins> </build>
The following terms are used in the example:
familyName | The name of the license family name that is approved. This should match licenseFamilyName of your licenseMatcher |