开源软件使用
如何查看开源软件所使用的协议
直接通过后文中的开源协议声明插件可查看开源软件协议。
也可直接查看pom.xml里面的license标签,如下为com.alibaba:duid:1.2.5包的license标签,可看出所用开源协议及协议地址。
<licenses>
<license>
<name>Apache 2</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
<distribution>repo</distribution>
<comments>A business-friendly OSS license</comments>
</license>
</licenses>
若没对对应标签,可查看源码文件头,一般都会有协议说明;若还没有的话,可以查看对应源码地址,一般会有协议说明。
开源软件使用义务履行
参照spring-*包、spring-boot-*包、apache下交付件(kafaka可执行包、maven可执行包、jemeter可执行包、tomcat可执行包、zookeeper可执行包),需要对发布件中包含三方包的可执行包(即bootapp)进行开源软件协议声明:
上述可执行包中包含各个开源协议的jar,jar对应的开源协议包含宽松协议和非宽松协议:
宽松协议:
Apache 2.0、WTFPL、MIT、BSD 2-Clause、BSD 3-Clause、CC0-1.0 AND Indiana University Extreme! Lab Software License, version 1.1.1、Public Domain
非宽松协议:
EDL、EPL、 CDDL 1.1 + GPLv2 with classpath exception、MPL 2.0 、LGPL 2.1、CDDL 1.0
据此:对于上述协议的包加上声明后直接使用即可。
开源软件协议声明
-
koca-parent pom.xml 3.5.0版本,增加了license-maven-plugin插件配置,可直接通过命令
mvn license:add-third-party
生成声明文件。生成的NOTICE文件中会按照协议名称进行分类,列举出所有依赖包、对应的协议以及协议链接、不包含协议原文。原理是解析pom中的licenses标签,如果包中没有licenses标签,会出现unkown的情况,这时候需要自行修改下文件。 -
将生成的NOTICE文件放到可执行包中。(KOCA中直接修改assembly.xml文件,加上NOTICE文件,详情见附录)
后续若要带上协议原文,应该也会直接使用插件或开发对应插件。
附录
assembly.xml配置中增加NOTICE文件
<?xml version='1.0' encoding='UTF-8'?>
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
<id>bin</id>
<formats>
<format>tar.gz</format>
</formats>
<includeBaseDirectory>true</includeBaseDirectory>
<fileSets>
<fileSet>
<directory>${project.basedir}/src/bin</directory>
<outputDirectory>bin</outputDirectory>
<includes>
<include>*.bat</include>
</includes>
<lineEnding>dos</lineEnding>
</fileSet>
<fileSet>
<directory>${project.basedir}/src/bin</directory>
<outputDirectory>bin</outputDirectory>
<includes>
<include>*.sh</include>
</includes>
<lineEnding>unix</lineEnding>
<fileMode>0755</fileMode>
</fileSet>
<fileSet>
<directory>${project.build.directory}/classes</directory>
<outputDirectory>conf</outputDirectory>
<includes>
<include>config/**</include>
<include>*.yml</include>
<include>logback-spring.xml</include>
<include>banner.txt</include>
</includes>
</fileSet>
<fileSet>
<directory>${project.build.directory}</directory>
<outputDirectory>lib</outputDirectory>
<includes>
<include>*-assembly.jar</include>
</includes>
</fileSet>
<fileSet>
<directory>${project.basedir}</directory>
<outputDirectory>./</outputDirectory>
<includes>
<include>NOTICE</include>
</includes>
</fileSet>
</fileSets>
</assembly>