license-maven-plugin执行检查的核心是配置插件、指定校验目标并明确其作用范围:它默认仅执行check goal,验证源码文件顶部许可证头是否存在且合规,并可扩展检查第三方依赖许可证是否在允许列表内。

直接用 license-maven-plugin 执行检查,核心是配置好插件、指定校验目标,并理解它查的是什么。
确认插件作用范围
这个插件默认只做「检查」(check goal),不生成文件也不修改代码。它主要验证两件事:
- 项目源码文件顶部是否含有合规的许可证头(比如 Java 文件开头的
/* ... */) - 第三方依赖的许可证是否在允许列表内(需配合配置启用)
注意:它不会读取你 pom.xml 里写的 <licenses> 来判断依赖协议——那些只是声明你自己的发布协议,依赖的真实协议来自它们各自的 pom.xml。
基础检查配置(源码头部)
在 pom.xml 的 <build><plugins> 中添加:
<plugin>
<groupId>com.mycila</groupId>
<artifactId>license-maven-plugin</artifactId>
<version>4.3</version>
<configuration>
<header>src/main/resources/header.txt</header>
<includes>
<include>**/*.java</include>
</includes>
<mapping>
<java>SLASHSTAR_STYLE</java>
</mapping>
<strictCheck>true</strictCheck>
</configuration>
<executions>
<execution>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>关键点:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
header.txt必须存在,内容为标准许可证头模板(可含${year}、${project.name}等变量) -
strictCheck=true表示缺失头部就构建失败;设为false则只警告 - 运行
mvn license:check即可触发校验
扫描依赖许可证(需额外配置)
要检查第三方依赖用了哪些协议,得启用插件的 add-third-party goal 并绑定到生命周期:
- 在
<executions>中增加一个 execution,goal 设为add-third-party - 设置
<phase>generate-resources</phase> - 配置
<outputDirectory>${project.build.outputDirectory}/META-INF/</outputDirectory>
执行 mvn generate-resources 后,会在 target/classes/META-INF/ 下生成 THIRD-PARTY-LICENSES.txt,列出所有 compile 范围依赖及其协议。
常见问题处理
如果构建失败提示 “unapproved license”,通常是因为:
- 某个依赖的许可证未被显式批准(如用了 SSPL 或 AGPL)
- 插件没配
<allowedLicenses>白名单 - 依赖本身 pom.xml 缺少
<licenses>声明,导致协议识别为空
解决方法:在 <configuration> 中加入 <allowedLicenses><license>Apache-2.0</license></allowedLicenses>,或使用 SPDX ID 明确列出允许项。

















