我的任务是审核我们发布的项目中使用的许可证,这是一个Spring Boot多模块Maven应用程序。
项目的结构是父pom.xml
声明Spring引导BOM:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
然后在其中一个子模块(我们有4个),即实际的Web应用程序中,我们已经将spring-boot-maven-plugin
配置为repackage
任务 - 这将创建一个大约31兆字节的可执行JAR
在这样的Spring启动项目上运行mvn site
,然后打开target/site/index.html
并单击“依赖关系管理”,我们可以看到Spring Boot提供的非常大的依赖关系列表。现在,我很确定我们只使用这个列表的一位数(如9或10个库),我可以在spring-boot-maven-plugin documentation上读到这只涉及“提供”范围,如Spring应该被视为一个应用程序容器。
另一方面,我正在使用mvn dependency:analyze
和mvn dependency:tree
目标来检查有效使用的内容,包括传递依赖项。大多数这些东西都没有在pom.xml
文件中声明,如上所述,我们有一个父pom使用Spring-boot中的BOM,然后在单个模块中我们根据需要激活依赖项。
我的问题:
1)在法律方面,我可以假设mvn site
为Spring Boot显示的所有内容都不是编译时使用的实际依赖列表吗?是否可以强制退出JAR我们没有使用的任何东西?我尝试使用排除列表配置spring-boot-manven-plugin,但JAR大小没有改变。
2)如何以编程方式编译依赖项列表和附加的许可证?我觉得mvn dependency:analyze
是正确的路径,但有没有办法轮询列出的任何模块使用的许可证?