I nästan alla fall vi utvecklar programvara för kunderna använder vi open-source-komponenter. Då är det extremt viktigt att ha koll på vilken typ av license som de komponenterna har.
Därför har jag byggt och publicerat en Maven-plugin som verifierar licenserna på samtliga beroenden som maven-projektet har.
För att kunna köras så behöver du en lista på licenser som du accepterar och som du inte accepterar. Det är en xml-fil och ligger per default under src/licenses/licences.xml.
Nedan ser du ett exempel där Apache-licensen är godkänd medan GPL är förbjuden.
<?xml version="1.0"?>
<licenses>
<valid>
<license>
<name>The Apache Software License, Version 2.0</name>
<names>
<name>The Apache Software License, Version 2.0</name>
</names>
<urls>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
</urls>
</license>
</valid>
<forbidden>
<license>
<name>GNU General Public License version 2</name>
<names>
<name>GNU General Public License version 2</name>
</names>
<urls>
<url>https://opensource.org/licenses/gpl-2.0.php</url>
</urls>
</license>
</forbidden>
</licenses>
När du sedan kör min plugin så kommer den att verifiera att licenserna som finns i beroenden finns i listan och att de är godkända:
$ mvn se.ayoy.maven-plugins:ayoy-license-verifier-maven-plugin:verify
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building se.ayoy.maven-plugins:ayoy-license-verifier-maven-plugin 1.0.1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- ayoy-license-verifier-maven-plugin:1.0.1:verify (default-cli) @ ayoy-license-verifier-maven-plugin ---
[INFO] Parsing dependencies.
[INFO] Found 5 artifacts. Now validating their licenses with the list.
[INFO] All licenses verified.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.521 s
[INFO] Finished at: 2017-10-27T09:44:37+02:00
[INFO] Final Memory: 9M/245M
[INFO] ------------------------------------------------------------------------
Om den hittar en licens som inte finns i listan eller som inte är godkänd avbryter den bygget:
$ mvn se.ayoy.maven-plugins:ayoy-license-verifier-maven-plugin:verify
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building se.ayoy.maven-plugins:ayoy-license-verifier-maven-plugin 1.0.2-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- ayoy-license-verifier-maven-plugin:1.0.1:verify (default-cli) @ ayoy-license-verifier-maven-plugin ---
[INFO] Parsing dependencies.
[INFO] Found 5 artifacts. Now validating their licenses with the list.
[WARNING] UNKNOWN artifact junit:junit:jar:4.12:test with licenses: org.apache.maven.model.License@66ea1466
[WARNING] license: name: "Eclipse Public License 1.0", names: ["Eclipse Public License 1.0"], urls: ["http://www.eclipse.org/legal/epl-v10.html"]
[WARNING] FORBIDDEN artifact org.mockito:mockito-all:jar:1.9.5:test with licenses: org.apache.maven.model.License@1601e47
[WARNING] license: name: "The MIT License", names: ["The MIT License"], urls: ["http://code.google.com/p/mockito/wiki/License"]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.398 s
[INFO] Finished at: 2017-10-27T09:47:50+02:00
[INFO] Final Memory: 10M/309M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal se.ayoy.maven-plugins:ayoy-license-verifier-maven-plugin:1.0.1:verify (default-cli) on project ayoy-license-verifier-maven-plugin: One or more artifacts has licenses which is unclassified. -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
Jag har valt att köra den varje gång jag bygger genom att lägga in den i pom-filen:
<plugin>
<groupId>se.ayoy.maven-plugins</groupId>
<artifactId>ayoy-license-verifier-maven-plugin</artifactId>
<version>1.0.1</version>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>verify</goal>
</goals>
</execution>
</executions>
<configuration>
<licenseFile>${project.parent.basedir}/licenses/licenses.xml</licenseFile>
<failOnForbidden>true</failOnForbidden>
<failOnMissing>true</failOnMissing>
<failOnUnknown>true</failOnUnknown>
</configuration>
</plugin>
Om du har kommentarer eller förbättringsförslag så är det bara att du hör av dig!