Maven-plugin för att verifiera licenser

2017-10-27   John Allberg   java maven licence

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!


Nästa inlägg ("Så kan du minska bedrägerier med BankID") >>
<< Tidigare inlägg ("Symantec inte längre betrodda av Google")

Dela på:    
John Allberg

John har arbetat med elektronisk identifiering och e-legitimationer sedan 2000. Först på Posten eSäkerhet mellan 2000 och 2004, sedan på Telia mellan 2004 och 2008. Från 2009 är han konsult inom området och 2010 grundade han Ayoy tillsammans med Oscar Jacobsson.