# Third Party Copyright Statement
This document addresses the copyright of third party source code or binary packages involved in the development process
Note: Sermant currently used protocol for the Apache 2.0 License (opens new window), the License has the following requirements:
- An Apache Licence is required for users of the code.
- If you make a change to the code, you need to explain it in the file that was changed.
- Extensions (modifications and code derived from source code) are required to include licenses, trademarks, patent claims, and other aspects of the original code as specified by the original author.
- If a Notice file is included in the release, the Apache Licence is required in the Notice file. You can add your own license to the Notice, but it must not appear to be a change to the Apache Licence.
# Source Code References
If in the code, there are the following conditions, as a reference to the third party source code:
Whole copy : Directly copy files from third party source code and modify them.
Partial copying : Copying part of a third party source code method or inner class and using it in your own code.
Design reference : If the developer refers to a third party architecture when designing the architecture, and there is the same content in both architectures, it is also considered as a reference.
In all three cases, the developer is required to do the following with the files involved:
Add a note about copying third parties source code to your
LICENSEfile, like this:The following files contain a portion of ${THIRD PARTY PROJECT NAME} project. ${RELATED FILE A} in this product is copied from ${THIRD PARTY FILE A} of ${THIRD PARTY PROJECT NAME} project. ${RELATED FILE B} in this product is copied from ${THIRD PARTY FILE B} of ${THIRD PARTY PROJECT NAME} project. ... ${THIRD PARTY PROJECT NAME} project is published at ${THIRD PARTY PROJECT CODEBASES URL} and its license is ${THIRD PARTY PROJECT LICENSE NAME}.Among them:
THIRD PARTY PROJECT NAMEdenotes the name of the third party project.RELATED FILEis the related file for this project: in the case of a class, enter the fully qualified name path; Otherwise, type the project relative path.THIRD PARTY FILEdenotes the copied file of the third party : if it is a class, type the fully qualified name path; Otherwise, type the project relative path. If the third-party project is a single-module project, you can also type a relative path to the source directory.THIRD PARTY PROJECT CODEBASES URLdenotes the address of the third party project codebases; If you can't find the source code warehouse address, you can change it to the official website address or source code download address, in short, the principle is to be traceable.THIRD PARTY PROJECT LICENSE NAMErefers to theLICENSEname of the third party project, which is usually referenced to thelicensestag in thepomfile, or pluralized if multiple licenses exist:... and its licenses are ${LICENSE A}, ${LICENSE B}, ..., and ${LICENSE C}.If there is already an entry for the target third party project, just hit the middle and fill in the copy information.
In the file in question type the header of the copied file (if any) and add the source of the copy, like this:
Based on ${THIRD PARTY FILE} from the ${THIRD PARTY PROJECT NAME} project.If a third-party project contains a
NOTICEfile, append it to the end of the project'sNOTICEfile. If it is already included, there is no need to append it more than once.
# With Dependent Jar Package
If the developer:
- The content of the
resourcestag is not modified - The
sermant.basedirargument in the developed module correctly points to the top-level directory - no
jardependencies, orshadedependencies without modifying thetransformerstag
There is no need to make any adjustments to the output jar package, otherwise read the instructions below and take it as it is.
In the default packaging process, you need to enter the project's default LICENSE file and NOTICE file. These files are placed in the resources/META-INF directory of the sermant-package module and are specifically pointed to by the resources tag.
As long as the sermant.basedir parameter in the packaging module (not a pom) points to the top-level directory of the project, these files will be added by default and you don't need to worry about them.
When using the shade, assembly, or spring wrapper to add a dependent jar, if any NOTICE files are included in the third-party jar, it is best to merge them with the project's default NOTICE file. shade plug-in ApacheNoticeResourceTransformer just can do this. This is configured in the top-level project's pom file, and it is not recommended to override the shade plugin Settings unless you need to modify the Transformer.
Note: When we refer to the default LICENSE file and NOTICE file in this section, we are referring to files that only contain information about the project. The LICENSE file and NOTICE file stored in the top-level directory of the project are the files after sorting out the source code copy information, containing information related to the project and the copied third party project information.
# RELEASE Package
The RELEASE package needs to include both the LICENSE file and the NOTICE file with the source code. The former file also needs to add the LICENSE information of all third-party jar packages included in the RELEASE package. The RELEASE package also needs to include third-party LICENSE that are different from the project's LICENSE in the Licenses directory, which is located in the resources directory of the sermant-package module.
To summarize, the internal structure of the RELEASE product package looks like this:
agentdirectory: core enhancement logicserverdirectory: Server side for enhanced logiclicensesdirectory: the directory where third-party open source dependenciesLICENSEare located, which are different from the project'sLICENSELICENSEfile: The project'sLICENSEfile, along with a copy of theLICENSEstatement of the third-party open source source code, and theLICENSEstatement of the third-party open source dependenciesjarpackages included in theRELEASEproduct packageNOTICEfile: This project'sNOTICEfile, appends a copy of third-party open source sourceNOTICEfile.
The project generates a LICENSE file, a NOTICE file, and a licenses directory for the RELEASE package as follows:
Generate
LICENSEinformation for all third-partyjarpackages involved in the project via thelicense-maven-pluginplugin:mvn license:aggregate-add-third-partyThe resulting file
LICENSE-binary-suffix-txtis placed in theresourcesdirectory of thesermant-packagemodule. This process takes a long time to execute at first, so be patient.Package project components and export them to a temporary directory.
When the
sermant-packagemodule is packaged:- Copy the project source's
LICENSEfile,NOTICEfile, andlicensesdirectory into a temporary directory. - Call the script to append the
LICENSE-binary-suffix-txtfile to theLICENSEfile in the temporary directory. - Minify the temporary directory into a
RELEASEpackage.
- Copy the project source's
With that in mind, developers can compile and RELEASE the release package with the following command:
mvn license:aggregate-add-third-party clean package -Dmaven.test.skip
