This plugin will scan and adapt your source files to include a provided header, e.g. a LICENSE file. By default it will scan every source set and report warnings. It will also create format tasks, which will properly format and apply the specified header. A bulk of the logic comes from the maven-license-plugin.
This plugin will also report on the licenses of your dependencies.
Applying the plugin
From v0.11.0 onwards the license-gradle-plugin will be published to http://bintray.com and will be available through the Gradle plugin exchange. This means that there are a few different usage scenarios listed below.
Gradle 2.1 and above
In your build.gradle file add:
plugins {
id "com.github.hierynomus.license" version "0.15.0"
}
plugins {
id "com.github.hierynomus.license-base" version"0.15.0"
}
This plugin contains two types of tasks to each source set available in your project: one for checking for consistency and one to apply the header, e.g.
licenseMain (LicenseCheck) : checks for header consistency in the main source set
licenseFormatMain (LicenseFormat) : applies the license found in the header file in files missing the header
licenseTest (LicenseCheck) : checks for header consistency in the test source set
licenseFormatTest (LicenseFormat) : applies the license found in the header file in files missing the header in the test source set
etc.
Furthermore this task exposes the license extension to the project, allowing you to finetune the configuration of the plugin.
com.github.hierynomus.license Plugin
plugins {
id "com.github.hierynomus.license" version"0.15.0"
}
This plugin will apply the following plugins:
com.github.hierynomus.license-base
com.github.hierynomus.license-report
Furthermore it will create the following tasks:
licenseCheck: This task depends on all the available LicenseCheck tasks in the project
licenseFormat: This task depends on all the available LicenseFormat tasks in the project
Also it will add the licenseCheck task to the check lifecycle task dependencies, so that during a regular build any missing headers are flagged.
Tasks
LicenseCheck
This task checks all the configured source files to validate whether the correct header has been applied. It can be configured using the following properties,
most of which can also be set on the extension to configure them for all tasks.
header
Specify location of header to use in comparisons, default to project.file('LICENSE')
headerURI
Specify location of header as a URI, see section below on Header Locations for examples
ignoreFailures
Prevent tasks from stopping the build, defaults to false
dryRun
Show what would happen if the task was run, defaults to false but also inherits from --dryRun
skipExistingHeaders
Skip over files that have some header already, which might not be the one specified in the header parameter, defaults to false
Be extra strict in the formatting of existing headers, defaults to false
mapping(String ext, String style)
Adds a mapping between a file extension and a style type
mapping(Map<String,String> mappings)
Adds mappings between file extensions and style types
mapping(Closure)
Adds mappings between file extensions and a style types, see example below
exclude(String pattern)
Add an ANT style pattern to exclude files from license absence reporting and license application
excludes(Collection<String> patterns)
Add ANT style patterns to exclude files from license absence reporting and license application
include(String pattern)
Add an ANT style pattern to include files into license absence reporting and license application
includes(Collection<String> patterns)
Add ANT style patterns to include files into license absence reporting and license application
LicenseFormat
This task formats all the configured source files to add a header to them if no header has been applied yet. It can be configured using the following properties,
most of which can also be set on the extension to configure them for all tasks.
header
Specify location of header to use in comparisons, default to project.file('LICENSE')
headerURI
Specify location of header as a URI, see section below on Header Locations for examples
ignoreFailures
Prevent tasks from stopping the build, defaults to false
dryRun
Show what would happen if the task was run, defaults to false but also inherits from --dryRun
skipExistingHeaders
Skip over files that have some header already, which might not be the one specified in the header parameter, defaults to false
Add a custom header definition that will be added to the defaults.
headerDefinitions(Closure)
Add a custom header definition that will be added to the defaults.
File Types
Supported by default: java, groovy, js, css, xml, dtd, xsd, html, htm, xsl, fml, apt, properties, sh, txt, bat, cmd, sql, jsp, ftl, xhtml, vm, jspx, gsp, json. Complete list can be found in the parent project at http://code.mycila.com/license-maven-plugin/#supported-comment-types.
Usage and Configuration
Header Locations
The plugin can load a reference license file from the local file system with the header property.
license { header = file('LGPL.txt') }
To load a license from a URI directly it can be headerURI property.
The problem with that approach is that we’re requiring a network call to run the task. Another option is
to load the license from the classpath. This is most commonly seen from a plugin which is configuring this
plugin. First you’d bundle a LICENSE.TXT file into the src/main/resources/META-INF directory. Then you’d
configure this plugin like the below code.
An extensive list of formats and mappings are available by default, see the SupportedFormats link above. Occasionally a project might need to add a mapping to a unknown file type to an existing comment style.
license {
mapping {
javascript='JAVADOC_STYLE'
}
}
// or
license.mapping 'javascript''JAVADOC_STYLE'// or
license.mapping('javascript', 'JAVADOC_STYLE')
// or directly on the task
licenseMain.mapping 'javascript''JAVADOC_STYLE'
Defining new comment types is not currently supported, but file a bug and it can be added.
Variable substitution
Variables in the format ${} format will be substituted, as long as their values are provided in the extension or the task.
Copyright (C) ${year} ${name} <${email}>
Will be completed with this extension block, the key is adding them via extra properties:
When the default header definitions can not be used for your specific project, we support the ability to define custom header definitions.
Adding a new header definition is done through the license extension. These header definitions can then be assigned to the necessary file types by mapping them to their extensions.
Include/Exclude files from license absence reporting and license application
By default all files in the sourceSets configured are required to carry a license. Just like with Gradle SourceSet you can use include/exclude patterns to control this behaviour.
The semantics are:
no includes or excludes: All files in the sourceSets will be included
excludes provided: All files except those matching the exclude patterns are included
includes provided: Only the files matching the include patterns are included
both includes and excludes provided: All files matching the include patterns, except those matching the exclude patterns are included.
This will exclude all .properties, .txt and *.conf files.
license {
include "**/*.groovy"
includes(["**/*.java", "**/*.properties"])
}
This will include only all .groovy, .java and *.properties files.
license {
include "**/*.java"
exclude "**/*Test.java"
}
This will include all *.java files, except the *Test.java files.
Running on a non-java project
By default, applying the plugin will generate license tasks for all source sets defined by the java plugin. You can also run the license task on an arbitrary file tree, if you don’t have the java plugin, or your files are outside a java source tree.
Next to checking for and applying license headers to your source files, this plugin also supports reporting on the licenses that your dependencies are licensed under.
com.github.hierynomus.license-report
plugins {
id "com.github.hierynomus.license-report" version"0.15.0"
}
This plugin will add a task to manage the downloading and reporting of licenses of your dependencies.
downloadLicenses : generates reports on your runtime dependencies
License Reporting
The downloadLicenses task has a set of properties, most can be set in the extension:
includeProjectDependencies
true if you want to include the transitive dependencies of your project dependencies
ignoreFatalParseErrors
true if you want to ignore fatal errors when parsing POMs of transitive dependencies
licenses
a pre-defined mapping of a dependency to a license; useful if the external repositories do not have license information available
aliases
a mapping between licenses; useful to consolidate the various POM definitions of different spelled/named licenses
excludeDependencies
a List of dependencies that are to be excluded from reporting
dependencyConfiguration
Gradle dependency configuration to report on (defaults to "runtime").
A 'license()' method is made available by the License Extension that takes two Strings, the first is the license name, the second is the URL to the license.
请发表评论