Last week I learned about the License Maven Plugin's real
 value. As developers, we usually just want to do our work and therefore
 become upset about "unimportant" things that get in our way. One of 
these things that we don't like to think about are licensing terms. When
 we find a library, we want to use it - and not undergo a tedious 
governance process which includes a deep analysis of the library's 
license, the library's dependencies' licenses, the dependencies' 
dependencies' licenses etc.
For me, it's "always" been normal just to grab the 
dependencies that I need from "somewhat" trustworthy sources. However, 
when you develop commercial software, there are some legal implications.
 One of the main considerations is the license question. And since more 
and more libraries depend on other libraries themselves, you must 
examine the whole tree. Doing this manually can take up a lot of time.
Take for example the Smooks library I'm currently looking at. It's more than a library; Smooks defines itself
 rather as a framework. It is used to process different data file 
formats and perform transformations between them. The project has been 
in development for several years now and as such "naturally" picked up a
 lot of 3rd party dependencies over this time.
Now imagine yourself sitting there as a developer who wants
 to use this library (or in this case framework). So you go ahead and 
add it to your maven dependencies. You mention this to your 
colleagues/team lead/... Suddenly, somebody with authority steps in and 
asks: "Did you check the license terms? And what about all the 
dependencies we're pulling in transitively now?"
This situation is far more common than most of us will like
 to admit. Of course, you can now go ahead and check the specific 
library's license, then look at its dependencies and do the same with 
these - all manually. But if the dependencies have dependencies which 
again have dependencies and so on... - well, you get the picture. This 
will probably work out quite fine for a simple library with dependencies 
that go no deeper than two levels. Beyond that, you can decide to either
 keep an intern busy for a day or two - or look for a technical tool.
The technical tool I found is the above mentioned License 
Maven Plugin. The usage page is a bit massive, but for my 
relatively simple purposes, these steps were sufficient:
- Add the plugin to the build section within the main Maven POM:
 <build>
 <plugins>
 <plugin>
 <groupId>org.codehaus.mojo</groupId>
 <artifactId>license-maven-plugin</artifactId>
 <version>1.8</version>
 </plugin>
 </plugins>
 </build>
- 
 Call mvn license:aggregate-add-third-party. In case of a single module project, you'd instead use the goal add-third-party.
 
- 
 This will produce a file called THIRD-PARTY.txt in the folder target/generated-sources/license of the project you made the call in.
 
- 
 This file lists all dependencies (including the transitive ones) in all child modules with their associated licenses (or Unknown license if that particular dependency contains no license information).
 
This file is what you can pass on to whoever asks you this kind of annoying question. Enjoy!
 
No comments:
Post a Comment