亚马逊电商网站,杭州软件app制作公司,如何创建一个自己的网页,便捷网站建设价格大家好#xff0c;这里是架构资源栈#xff01;点击上方关注#xff0c;添加“星标”#xff0c;一起学习大厂前沿架构#xff01; 建议使用mvn dependency:analyze命令来摆脱已声明但未使用的依赖项#xff1a; 还有另一个用例#xff0c; mvn dependency:analyze 它可…大家好这里是架构资源栈点击上方关注添加“星标”一起学习大厂前沿架构 建议使用mvn dependency:analyze命令来摆脱已声明但未使用的依赖项 还有另一个用例 mvn dependency:analyze 它可以显示您在代码中使用但未在 pom.xml 中声明的依赖项。这有效是因为您对类路径具有传递依赖性。要么不使用该依赖项要么声明它。 虽然几年前这是一个好主意但今天却是一个危险的建议。在这篇文章中我想解释一下这个插件的作用以及为什么不应该在最简单的项目中使用它。
命令mvn dependency:analyze
Maven 使用插件架构在上面的命令中插件是maven-dependency-plugin。一个插件承载着几个相关的_目标_。在这里它是analyze。 分析此项目的依赖项并确定哪些是已使用且已声明已使用且未声明未使用且已声明。此目标旨在独立使用因此它始终执行该test-compile阶段 -dependency:analyze-only在参与构建生命周期时改用该目标。 默认情况下maven-dependency-analyzer用于执行分析由于它在字节码级别工作而存在限制但可以通过analyzer参数插入任何分析器。 –依赖项分析 maven-dependency-analyzer是一个共享的 Maven 组件。它的描述相当详细 分析项目中未声明或未使用的工件的依赖关系。 警告由于分析是在字节码而不是源代码上进行的因此有些情况无法检测到包括常量、仅保留源代码的注释以及 Javadoc 中的链接。当这些是依赖项的唯一用途时这可能会导致不正确的结果。 主要成分为ProjectDependencyAnalyzer采用ClassAnalyzer和DependencyAnalyzer。 –maven依赖分析器 警告清楚地表明它在_字节码_级别起作用。特别是它明确提到它不考虑源级注释。
Spring Boot 启动器
很久以前我描述了如何设计自己的 Spring Boot starter 从那时起它就没有发生过太大的变化。如果你刚接触 Spring Boot starter这里有一个总结。
SpringBoot 依赖于 AutoConfiguration 类。AutoConfiguration 类是常规配置类_即_它们对应用程序类有所贡献。您可以设置特定的激活条件例如 Spring 属性的存在但这些条件并非特定于自动配置。
这是一个非常简化的流程 Spring Boot 自动附带的 JAR 是org.springframework.boot:spring-boot-autoconfigure。你可以检查其内容META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
...
org.springframework.boot.autoconfigure.web.client.RestClientAutoConfiguration
org.springframework.boot.autoconfigure.web.client.RestTemplateAutoConfiguration
org.springframework.boot.autoconfigure.web.embedded.EmbeddedWebServerFactoryCustomizerAutoConfiguration
org.springframework.boot.autoconfigure.web.reactive.HttpHandlerAutoConfiguration
org.springframework.boot.autoconfigure.web.reactive.ReactiveMultipartAutoConfiguration
org.springframework.boot.autoconfigure.web.reactive.ReactiveWebServerFactoryAutoConfiguration
org.springframework.boot.autoconfigure.web.reactive.WebFluxAutoConfiguration
org.springframework.boot.autoconfigure.web.reactive.WebSessionIdResolverAutoConfiguration
org.springframework.boot.autoconfigure.web.reactive.error.ErrorWebFluxAutoConfiguration
org.springframework.boot.autoconfigure.web.reactive.function.client.ClientHttpConnectorAutoConfiguration
org.springframework.boot.autoconfigure.web.reactive.function.client.WebClientAutoConfiguration
org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration
org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration
org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration
org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration
org.springframework.boot.autoconfigure.web.servlet.MultipartAutoConfiguration
org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration
org.springframework.boot.autoconfigure.websocket.reactive.WebSocketReactiveAutoConfiguration
org.springframework.boot.autoconfigure.websocket.servlet.WebSocketServletAutoConfiguration
org.springframework.boot.autoconfigure.websocket.servlet.WebSocketMessagingAutoConfiguration
org.springframework.boot.autoconfigure.webservices.WebServicesAutoConfiguration
org.springframework.boot.autoconfigure.webservices.client.WebServiceTemplateAutoConfigurationEnter fullscreen mode Exit fullscreen mode
举个例子下面是RestClientAutoConfiguration
AutoConfiguration(after { HttpClientAutoConfiguration.class, HttpMessageConvertersAutoConfiguration.class }) //1
ConditionalOnClass(RestTemplate.class) //2
Conditional(NotReactiveWebApplicationCondition.class) //3
public class RestTemplateAutoConfiguration {// Class body
}Enter fullscreen mode Exit fullscreen mode
设置自动配置类的顺序RestTemplate如果类位于类路径上则激活如果我们不在响应式 Web 应用环境中则激活
请注意无论类是否__在类路径上类加载器RestTemplateAutoConfiguration都可以正常加载类如上所示Spring 充分利用了此机制。实际上注释中配置的类的解析被推迟到_显式_访问它们为止。RestTemplate
带入maven-dependency-analyzer现代
提交者在 2007 年设计了该分析器当时它的样子如下。Spring Boot 的推出时间较晚为 2010 年。因此该分析器未在注释中采用延迟类加载。请注意现在情况仍然如此该项目并没有得到太多的关注。
在 Spring Boot 项目中使用该插件时您会得到很多误报。我在一个简单的 Spring Boot 项目中尝试了它在 PostgreSQL 上使用 WebFlux 和 R2DBC。
以下是我运行时输出的一小部分摘录mvn analyze:dependencies
[WARNING] Unused declared dependencies found:
[WARNING] org.springframework.boot:spring-boot-starter-data-r2dbc:jar:3.4.0:compile
[WARNING] org.testcontainers:postgresql:jar:1.20.4:test
[WARNING] org.testcontainers:r2dbc:jar:1.20.4:testEnter fullscreen mode Exit fullscreen mode
如果我删除任何这些依赖项测试就不会运行。
要使分析器与 Spring Boot 项目一起工作需要什么让我们分析一下分析器。 该插件允许配置另一个分析器 指定要使用的项目依赖项分析器plexus 组件角色提示。默认情况下使用 maven-dependency-analyzer。要使用此功能您必须为此插件声明一个包含分析器代码的依赖项。分析器必须具有声明的 Plexus 角色名称您可以在此处指定角色名称。 类型java.lang.String自从2.2必需的No用户属性analyzer默认default –依赖项分析 我们可以创建一个整体的分析器重复使用上面的内容但添加一个特定于 Spring Boot 的分析器。
结论
Maven 分析器的当前状态对现代 Spring Boot 项目没有任何好处。现有代码可供配置甚至扩展。但是我们需要嵌入大量 Spring Boot 逻辑。对于 Quarkus 和 Micronaut 项目我们还需要专用代码。
我不知道这是否值得花费时间和精力。如果你认为值得我希望这篇博文可以作为早期的分析。
进一步来说
依赖关系分析Maven 依赖分析器设计你自己的 Spring Boot 启动器 – 第 1 部分设计你自己的 Spring Boot 启动器 – 第 2 部分 原文地址https://mp.weixin.qq.com/s/ro3EWXyoQKI0EcUqOZTLsQ