前言
在开源或公司中开发项目时,通常需要在源文件顶部添加许可证以保护版权。在自己从业到现在,几家公司、见过太多的项目,但都出乎我意料,对版权都并不是很在意,甚至干了很久的老前辈们也不曾清楚这个东西,自己在代码上可是杠精,在意各种小细节。今天就来聊聊如何给代码添加版权。
如果说第一次知道版权是从什么时候,那应该是我刚工作的时候,非常喜欢去找别人封装的框架,因为我知道我定能从中学到什么,果然我发现别人的代码上面有版权声明,随即便开始搜索研究这个东西,然后给公司的项目代码也添加上了代码版权。当时添加用的是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>
有关更加详细的配置请查看官方文档