使用license-maven-plugin为项目源文件顶部添加许可证

前言

  在开源或公司中开发项目时,通常需要在源文件顶部添加许可证以保护版权。在自己从业到现在,几家公司、见过太多的项目,但都出乎我意料,对版权都并不是很在意,甚至干了很久的老前辈们也不曾清楚这个东西,自己在代码上可是杠精,在意各种小细节。今天就来聊聊如何给代码添加版权。
  如果说第一次知道版权是从什么时候,那应该是我刚工作的时候,非常喜欢去找别人封装的框架,因为我知道我定能从中学到什么,果然我发现别人的代码上面有版权声明,随即便开始搜索研究这个东西,然后给公司的项目代码也添加上了代码版权。当时添加用的是IDEA开发工具进行配置后全局更新添加的,IDEA Copyright 大家想了解可以去点击链接看官方帮助手册了解。但这种方式有着局限,那就是公司里面不光用使用IDEA的同学,也有eclipse的同学呀,如果人很多,你需要帮助他们配置或者让他们学习后自己配置,还是比较耗费时间和精力的,那有没有一种更好的方式呢?答案是肯定的,license-maven-plugin它来了。可以让你无视开发工具,通过maven命令直接生成,真是爽歪歪啊。
  说了不少,那我又是怎么知道这个插件的呢?答案还是看源码,周五的时候看蚂蚁金服sofa框架,无意中便发现了这个小东西,随即了解了一下,便用上了,真是好用来,便放弃了IDEA配置copyright方式,转而是用license-maven-plugin

官网

http://mycila.mathieu.photography/license-maven-plugin/

特征

check:检查某些源文件中是否缺少标题
format:如果缺少则添加标题
remove:可以删除现有的标题
update:用一个新的头更新现有的头
custom mappings:可轻松支持新文件扩展名
variable replacement:您可以在标头中添加一些变量,例如${year}${owner},它们将被取自pom或系统属性的相应值代替。

配置

HEADER文件

在项目下添加HEADER文件,license-maven-plugin随附以下许可证模板:

  • AGPL3
  • APACHE2
  • BSD 2,3,4
  • LGPL3
  • MirOS
  • MIT
  • MPL2
  • WTFPL
  • UNLICENSE
    可以到此找到带有预配置占位符的许可证模板
    这里我提供一份适合公司使用的许可证模板,大家改改给自己项目用上去吧。
**********************************************************************
Copyright (c) ${project.inceptionYear} .
All rights reserved.
项目名称:${project.name} 
项目描述:${project.description}
版权说明:本软件属XXX有限公司所有,在未获得XXX有限公司正式授权情况下,任何企业和个人,不能获取、阅读、安装、传播本软件涉及的任何受知识产权保护的内容。
***********************************************************************

在上面可以看到${}占位符,下面讲述一下属性和占位符。可以用作占位符的属性来自:

  • 环境变量
  • POM属性
    • project.groupId
    • project.artifactId
    • project.version
    • project.name
    • project.description
    • project.inceptionYear
    • project.url
  • 文档属性
    • file.name
  • 插件配置属性(来自<properties>标记)
  • 系统属性

声明

<properties>
    <!--main.user.dir-->
   <main.user.dir>${user.dir}</main.user.dir>  
</properties>
<plugin>
     <groupId>com.mycila</groupId>
     <artifactId>license-maven-plugin</artifactId>
     <version>3.0</version>
     <executions>
         <execution>
             <phase>generate-sources</phase>
             <goals>
                 <goal>remove</goal>
                 <goal>format</goal>
             </goals>
         </execution>
     </executions>
     <configuration>
         <quiet>true</quiet>
         <!--HEADER文件-->
         <header>${main.user.dir}/HEADER</header>
         <!--排除文件-->
         <excludes>
             <exclude>**/*.properties</exclude>
             <exclude>*.sh</exclude>
             <exclude>*.yml</exclude>
             <exclude>.editorconfig</exclude>
             <exclude>.gitignore</exclude>
             <exclude>**/*.md</exclude>
             <exclude>**/*.xml</exclude>
         </excludes>
         <!--严格检查-->
         <strictCheck>true</strictCheck>
         <mapping>
             <java>SLASHSTAR_STYLE</java>
         </mapping>
     </configuration>
 </plugin>

命令

  • mvn license:check:验证那些文件是否缺少许可证标题。如果在上述pom.xml中声明了此goals,则该goals将附加到验证阶段。
  • mvn license:format:缺少时添加许可证标题。如果许可证标题存在,则将其更新为新许可证标题。
  • mvn license:remove:删除现有的许可证标题。

使用

现在我们可以执行package命令试试,完成以后看下源文件标题是不是已经添加上版权声明了。

进阶

注释类型

我们可以为不同的类型的文件设置不同类型的注释类型

  • JAVAPKG_STYLE (like Javadoc, but only for files that are in a Java package, skips the first line): not assigned to a file extension by default (see Java packages below for how to enable it)
    package com.example;
    /*-
     * My comment
     */
  • XML_STYLE (XML-like comments): *.pom, *.xml, *.xhtml, *.mxml, *.dtd, *.xsd, *.jspx, *.fml, *.xsl, *.html, *.htm, *.kml, *.gsp, *.tld
    <!--
        My comment
    -->
  • XML_PER_LINE (alternate XML-like comments)
    <!-- My first comment  -->
    <!-- My second comment -->

(automatically right-adjusts the closing comment)

  • DOUBLETILDE_STYLE (APT-like comments): *.apt
    ~~ My comment
  • SCRIPT_STYLE (Property file or shell comments): *.properties, *.sh, *.py, *.rb, *.pl, *.pm, *.yml, *.yaml
    # My comment
  • HAML_STYLE: *.haml, *.scaml
    -# My comment
  • BATCH (Windows batch comments): *.bat, *.cmd
    @REM My comment
  • TEXT (Text like comments): *.txt
    ====
        My comment
    ====

(4 spaces, then the lines of the header)

  • DOUBLEDASHES_STYLE (Sql like comments): *.sql, *.adb, *.ads, *.e
    --
    -- test comment
    --
  • DYNASCRIPT_STYLE (JSP like comments): *.jsp
    <%--
        comment
    --%>
  • FTL (FreeMarker like comments): *.ftl
    <#--
        comment
    -->
  • FTL_ALT (FreeMarker Alternative Syntax comments)
    [#ftl ...]
    [#--
        comment
    --]
  • SHARPSTAR_STYLE (Velocity templates comments): *.vm
    #*
        comment
    *#
  • SEMICOLON_STYLE (Assembler like comments): *.asm
    ;
    ; comment
    ;
  • BRACESSTAR_STYLE (Delphi like comments): *.pas
    {*
     * comment
     *}
  • APOSTROPHE_STYLE (VisualBasic like comments): *.bas
    '
    ' comment
    '
  • EXCLAMATION_STYLE (Fortran like comments): *.f
    !
    ! comment
    !
  • SLASHSTAR_STYLE (JavaScript like comments): *.js
    /*
     * comment
     */
  • DYNASCRIPT3_STYLE (Coldfusion like comments): *.cfc, *.cfm
    <!---
        comment
    --->
  • PERCENT_STYLE (Teχ like comments): *.cls, *.sty, *.tex
    % comment
  • PERCENT3_STYLE (Erlang like comments): *.erl, *.hrl
    %%%
    %%% comment
    %%%
  • EXCLAMATION3_STYLE (Lisp like comments): *.el
    !!!
    !!! comment
    !!!
  • LUA (Lua like comments): *.lua
    --[[
    comment
    ]]
  • ASP (Asp like comments): *.asp
    <%
    ' comment
    %>
  • PHP (PHP comments): *.php
    /*
     * comment
     */

(inserted after the <?php> tag)

  • DOUBLESLASH_STYLE (often used comments style)
    //
    // comment
    //

自定义映射

该插件使您可以添加所需的任何其他映射。在.xml、.application文件中添加许可证标头。由于这些文件是xml文件,因此您只需要在项目pom中添加license-maven-plugin的以下映射:

 <mapping>
     <application>XML_STYLE</application>
     <xml>XML_STYLE</xml>
 </mapping>

有关更加详细的配置请查看官方文档

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容