82天突破1000颗星,项目组整理出开源软件必须注意的8个方面由于这是SIA团队的第一个开源项目,团队在开源相关工作上经验不多之前,所以特意整理了一下这个开源项目的各种记录,希望能为以后的开源项目做一个参考。一、开发在开源项目的开发过程中,需要注意以下几点:首先,要为自己的项目选择一个合适的名称。开源项目具有相同的名称。其次,选择合适的编程语言。再次,编码过程中要注意代码规范。最后要说的是开源协议的选择。目前最流行的开源协议有以下六种:GPL、BSD、MIT、Mozilla、Apache、LGPL。不同的开源协议之间的区别还是挺大的。具体如何选择,大家可以参考一张图了解开源协议(https://blog.csdn.net/cwt19902010/article/details/53736746),如果这些常用的没有开源协议适合你的项目,您也可以编写自己的开源协议。为了更方便的查看开源协议选择图,参考图如下:以ApacheLicenseVersion2.0协议为例,比较常见协议与Apache协议的冲突。冲突图如下:2.协议项目开发完成后,需要整理一下使用的协议(包括项目引用的组件中使用的协议),推荐使用maven许可证插件在这里。有关插件配置,请参阅许可证Maven插件(https://www.mojohaus.org/license-maven-plugin/)。主pom中mavenlicense插件配置示例如下(这里开源协议使用Apache2.0)ApacheLicense,Version2.0http://www.apache.org/licenses/LICENSE-2.0.html>repo<插件>org.codehaus.mojolicense-maven-plugin1.13${main.basedir}LICENSE-3RD-PARTY/org/codehaus/mojo/license/third-party-file-groupByLicense.ftltrue${main.basedir}/LICENSE-3RD-PARTY.properties${main.basedir}/LICENSE-3RD-PARTY.propertiesApache2.0|ASL,version2|http://www.apache.org/licenses/LICENSE-2.0.txt|http://asm.ow2.org/license.html|TheApacheLicense,Version2.0|ApacheLicense|ApacheLicenseVersion2|ApacheLicenseVersion2.0|ApacheSoftwareLicense-Version2.0|Apache2.0License|ApacheLicense2.0|ASL|Apache2|Apache-2.0|theApacheLicense,ASLVersion2.0|TheApacheSoftwareLicense,Version2.0|ApacheLicense,Version2.0|ApachePublicLicense2.0BSD|TheBSD3-ClauseLicense|TheBSDLicense|修改后的BSDLicense|NewBSDlicense|NewBSDlicense|双条款BSD-stylelicense|BSDlicence|BSDNew|TheNewBSDLicense|BSD3-Clause|BSD3-clauseMIT|MITLicense|TheMITLicenseLGPL|LGPL,version2.1|GNULibraryorLesserGeneralPublicLicense(LGPL)V2.1|GNULesserGeneralPublicLicense(LGPL),Version2.1|GNULesserGeneralPublicLicense,Version2.1|LGPL2.1CDDL|CDDL+GPL|CDDL+GPLLicense|CDDL+GPLv2withclasspathexception|CDDLlicense|CDDL1证书.0|CDDL1.1|COMMONDEVELOPMENTANDDISTRIBUTIONLICENSE(CDDL)Version1.0|CommonDevelopmentandDistributionLicense(CDDL)v1.0EPL|EclipsePublicLicense-Version1.0GPL|GPL2w/CPE|GPLv2+CE|GNUGeneralPublicLibraryMPL|MPL1.1PublicDomainCommonPublicLicense|CommonPublicLicenseVersion1.0CC0|CC01.0Universal|PublicDomain,perCreativeCommonsCC0UnknownLicense|Unknownlicensetrue${main.basedir}/lic/licenses.xml${main.basedir}/lic/licenses/apache_v22019siatasksrc/main/javasrc/test/java**/*.java**/*.xml**/*.sh**/*.py**/*.properties**/*.sql**/*.html**/*.less**/*.css**/*.js**/*.jsontruetruefalsetrue<<>>>==${main.basedir}/LICENSEorg.jasig.mavenmaven-通知插件1.0.6.1falsehttps://source.jasig.org/licenses/NOTICE.templatehttps://source.jasig.org/licenses/license-mappings.xml配置完成后,执行以下命令生成对应的协议到相应的文件,命令如下:####Updates(orcreates)themainprojectlicensefileaccordingtothelicensedefinedinthelicenseNameparameter.`mvnlicense:update-project-license`####Generateatesafilecontainingalistofalldependenciesandtheirlicensesforamulti-modulebuild.`mvnlicense:aggregate-add-third-party`####Downloadsthelicensefilesassociatedwitheachdependencyforamulti-modulesbuild.`mvnlicense:aggregate-download-licenses`####GenerateNOTICE?`mvnnotice:generate`项目开源时,需要在源文件顶部添加保护许可证,修改,检查并删除源文件头部保护许可命令如下:####howttogenerate/updatesourcecodeheader?##Updatethelicenseheaderoftheccurrentprojectsourcefiles.mvnlicense:update-file-header##Checksthelicenseheaderofthecurrentprojectsourcefiles.mvnlicense:check-file-header##Removeanylicenseheaderofthecurrentprojectsourcefiles.mvnlicense:remove-file-header执行以上命令后,会生成几个协议文件,包括两个关键文件:LICENSE文件:存放当前开源项目使用的开源协议信息LICENSE-3RD-PARTY文件:组件使用的协议。查看LICENSE-3RD-PARTY文件中组件使用的协议,参考前面介绍的协议冲突,查看组件使用的协议是否与当前开源选择的开源协议冲突项目,如果有冲突,需要更换协议冲突接口。3.安全扫描安全扫描是项目开源过程中必不可少的一步。安全扫描的要点如下:组件级别的安全问题。例如:组件是否存在远程代码执行风险、XXE风险等代码级安全问题。比如:RequestMapping上的requestunrestrictedmethods等。公司敏感信息是否泄露。例如:暴露数据库连接信息、邮箱信息等。备注:安全部和安全服务组同事负责完成安全扫描工作。项目开发完成后,可以联系安全服务团队同事进行代码安全扫描。4.文档README文档相当于一个开源项目的门面。如果README文档写得好,可以让用户更好的了解开源项目的功能,降低用户的使用成本。可以说,README文档写得好的开源项目不一定是好的开源项目,但是好的开源项目一定有README文档写好的。下面简单介绍一下README文档的编写规范。结合GitHub上很多大型开源项目的README文档,个人认为README文档主要由以下几个部分组成:1)项目介绍项目介绍是为了让别人快速了解项目。主要内容包括项目背景和项目介绍。2)项目架构项目架构主要介绍项目的实现方法,让用户更好的理解项目的实现原理。3)项目集成方法项目集成方法是项目开发指南,可以列出项目的部署方法,或者jar包的使用方法。4)项目使用指南项目使用指南是告诉用户如何使用该项目。最好附上每个使用步骤的截图,这样可以减少后期与用户沟通的成本。5)版本说明这里需要告诉用户哪个版本比较稳定。6)版权说明版权信息可用于保护作者权益,保护作者版本信息的合法权益。7)项目交流方式在项目交流方式部分,可以在微信、微博、邮箱等留下开源作者或组织的联系方式,方便用户与开源作者进一步的技术交流。5.版本GitHub上的开源项目需要有一个版本号。版本的格式为:主版本号。次版本号。修订号。版本号递增规则如下:Majorversionnumber:当你修改不兼容的API时;版本号:当你做了一个向后兼容的功能添加时;修订号:当您修复向后兼容的问题时。可以在“主版本号.次版本号.修订号”末尾添加上一个版本号和版本编译元数据作为扩展名。更形象的解释是:标准版本号必须是X.Y.Z格式,其中X、Y、Z为非负整数,数字前禁止补零。X是主版本号,Y是次版本号,Z是修订号。每个元素都必须按值递增。例如:1.9.1->1.10.0->1.11.0。备注:开源版本规范引用自GitHub命名规范:SemanticVersion2.0.0:https://semver.org/lang/zh-CN/6.开源完成以上步骤后,我们就可以上传项目了转到GitHub获取开源。GitHub的使用网上有很多文章,这里不再赘述。可以参考GitHub上参与开源项目的日常流程:https://blog.csdn.net/five3/article/details/93070417.开源后期维护服务是开源项目最多的容易被忽视。为了让用户更好的使用开源项目,我们可以通过GitHub问题、微信问答群、论坛、社区文章分享等方式做好开源后的后期工作。8.迭代GitHub上的迭代开发流程是:项目所有者为项目开发者设置成员权限,成员用户将开源项目的资源fork成自己的资源,fork后对资源进行修改。修改完成后,提出合并请求,只有项目所有者才有合并权限。如何同步fork项目可以参考以下文章如何同步fork项目:https://blog.csdn.net/t111t/article/details/45894381开源项目:微服务任务调度框架:https://github。com/siaorg/sia-task微服务路由网关:https://github.com/siaorg/sia-gateway【本文为专栏组织宜信工学院原创文章,微信公众号》宜信工学院(ID:CE_TECH)“]