Add a license not present in license-maven-plugin
You might want to add a new license that is not already managed by the plugin (common free software licenses are managed, but in case of proprietary software (open or closed source, other license might be used).
Create the license files
To use a new license, you need to define two content files :
- the header file (this content will be added in header of all source files) - the license file (this file is the real license file placed at the root of the maven project in (by convention) LICENSE.txt file.
- src/license/my_license/header.txt
Example for GPLv3 :
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/gpl-3.0.html>.
- src/license/my_license/license.txt
Example for GPLv3 :
GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. ... The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read <http://www.gnu.org/philosophy/why-not-lgpl.html>.
Declare the new license
The new license(s) must be declared in the file : src/license/licenses.properties. One license per line like :
my_license=My license
The default (convention) configuration use header.txt and license.txt as file names for the header and license file.
This can be changed using this syntax in the license repository definition file like this
my_license=My license~~license:licenseFileName.html~~header:headerFileName.html
In this example, you have then to define a licenseFileName.html and headerFileName.html file in the my_license directory.
Configure the plugin
You need to specify the name of your license and where to find it.
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>license-maven-plugin</artifactId>
<version>2.5.0</version>
<configuration>
<licenseName>my_license</licenseName>
<licenseResolver>${project.baseUri}/src/license</licenseResolver>
</configuration>
<executions>
<execution>
<id>first</id>
<goals>
<goal>update-file-header</goal>
</goals>
<phase>process-sources</phase>
</execution>
</executions>
</plugin>
or
<properties>
<license.licenseName>my_license</license.licenseName>
<license.licenseResolver>${project.baseUri}/src/license</license.licenseResolver>
</properties>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>license-maven-plugin</artifactId>
<version>2.5.0</version>
<executions>
<execution>
<id>first</id>
<goals>
<goal>update-file-header</goal>
</goals>
<phase>process-sources</phase>
</execution>
</executions>
</plugin>
Using a license resolver from classpath
Since version 1.3, it is possible to use a license resolver from classpath (means included into a jar or any dependency of the plugin dependencies).
Just use the classpath:// protocol in the plugin configuration.
Imagine you have a license resolver in an artifact com.my:extraLicenseResolvers:1.0 in package foo.bar
Next example show how to use this license resolver from classpath:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>license-maven-plugin</artifactId>
<version>2.5.0</version>
<configuration>
<licenseName>my_license</licenseName>
<licenseResolver>classpath://foo/bar</licenseResolver>
</configuration>
<executions>
<execution>
<goals>
<goal>update-file-header</goal>
</goals>
<phase>process-sources</phase>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>com.my</groupId>
<artifactId>extraLicenseResolvers</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
</plugin>
Using templates in license files
Since version 1.6, license and header content files can be parametrized using FreeMarker template engine.
To do so, just add .ftl extension to license or header file, you don't need to change the licenseRepository definition, the plugin will always try (if not found with default file name to search with an extra .ftl extension).
Here is the list of all available properties in such templates:
all system properties with prefix env_
all project properties with prefix project_
project (maven project)
projectName (plugin projectName parameter)
organizationName (plugin organizationName parameter)
copyright.firstYear (plugin inceptionYear parameter) (*)
copyright.lastYear (computed currentYear (or null if equals to firstYear)) (*)
copyright.years (computed years range (if lastYear different from firstYear))
copyright.holder (plugin copyrightOwners or organizationName parameter)
extraTemplateParameters (plugin extraTemplateParameters parameter with prefix extra_)
(*) This are numbers, so use the ?c to not have a localized representation of the number.