Developer Advocate, eternal learner, author
Neseniai mano geras draugas Richardas Fichtneris patarė naudoti komandą mvn dependency:analyze
, kad atsikratytumėte deklaruotų, bet nepanaudotų priklausomybių:
Nors prieš daugelį metų tai buvo puiki idėja, šiandien tai pavojingas patarimas. Šiame įraše norėčiau paaiškinti, ką daro papildinys ir kodėl neturėtumėte jo naudoti, bet paprasčiausiuose projektuose.
mvn dependency:analyze
Maven naudoja papildinio architektūrą; aukščiau pateiktoje komandoje papildinys yra maven-dependency-plugin . Papildinys turi keletą susijusių tikslų . Čia yra analyze
.
Analizuoja šio projekto priklausomybes ir nustato, kurios yra: naudojamos ir deklaruojamos; naudotas ir nedeklaruotas; nenaudotas ir deklaruotas. Šis tikslas yra skirtas naudoti atskirai, todėl jis visada vykdo
test-compile
etapą – dalyvaudami kūrimo cikle naudokitedependency:analyze-only
tikslą.
Pagal numatytuosius nustatymus analizei atlikti naudojamas
maven-dependency-analyzer
su apribojimais dėl to, kad jis veikia baito kodo lygiu, tačiau bet kurį analizatorių galima prijungti peranalyzer
parametrą.
maven-dependency-analyzer
yra bendras „Maven“ komponentas. Jo aprašymas yra gana aprašomasis:
Analizuoja projekto priklausomybes nuo nedeklaruotų ar nepanaudotų artefaktų.
Įspėjimas : kadangi analizė atliekama pagal baitinį kodą , o ne į šaltinį, kai kurie atvejai neaptinkami, įskaitant konstantas, komentarus su tik šaltinio išsaugojimu ir nuorodas „Javadoc“. Tai gali lemti neteisingus rezultatus, kai tai yra vieninteliai priklausomybės būdai.
Pagrindinis komponentas yra
ProjectDependencyAnalyzer
, kuris naudojaClassAnalyzer
irDependencyAnalyzer
.
Įspėjimas aiškiai rodo, kad jis veikia baito kodo lygiu. Konkrečiai, jame aiškiai paminėta, kad neatsižvelgiama į šaltinio lygio anotacijas.
Jau seniai aprašiau, kaip sukurti savo „Spring Boot“ starterį , ir nuo to laiko jis beveik nepasikeitė. Jei nesate naujokas „Spring Boot“, pateikiame santrauką.
„SpringBoot“ remiasi „AutoConfiguration“ klasėmis. AutoConfiguration klasės yra įprastos konfigūracijos klasės, ty jos prisideda prie taikomųjų programų klasių. Galite nustatyti konkrečius aktyvinimo kriterijus, pvz., pavasario ypatybės buvimą, tačiau jie nėra būdingi automatinei konfigūracijai.
Štai labai supaprastinta eiga:
Supaprastinta „Spring Boot“ automatinio konfigūravimo sekos schema
JAR, kuris automatiškai pateikiamas kartu su Spring Boot, yra org.springframework.boot:spring-boot-autoconfigure
. Galite patikrinti jo META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
turinį:
... 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.WebServiceTemplateAutoConfiguration
Pavyzdžiui, čia yra „ RestClientAutoConfiguration
:
@AutoConfiguration(after = { HttpClientAutoConfiguration.class, HttpMessageConvertersAutoConfiguration.class }) //1 @ConditionalOnClass(RestTemplate.class) //2 @Conditional(NotReactiveWebApplicationCondition.class) //3 public class RestTemplateAutoConfiguration { // Class body }
RestTemplate
yra klasės kelyje
Atminkite, kad klasės įkroviklis puikiai įkelia RestTemplateAutoConfiguration
klasę, nepaisant to, ar „ RestTemplate
klasė yra klasės kelyje, ar ne! Spyruoklė išnaudoja šį mechanizmą iki galo, kaip matyti aukščiau. Tiesą sakant, anotacijose sukonfigūruotų klasių raiška atidedama, kol jos bus aiškiai pasiekiamos.
maven-dependency-analyzer
perkėlimas į šiuolaikinį amžių„Committers“ analizatorių sukūrė 2007 m.: štai kaip jis atrodė tada. „Spring Boot“ prasidėjo vėliau, 2010 m. Dėl šios priežasties analizatorius nepriėmė atidėto klasės įkėlimo anotacijose. Atkreipkite dėmesį, kad taip nėra; projektas nesulaukia daug meilės.
Naudodami papildinį „Spring Boot“ projekte gausite daug klaidingų teigiamų rezultatų. Išbandžiau tai su paprastu Spring Boot projektu, naudodamas „WebFlux“ ir „R2DBC“ sistemoje „PostgreSQL“.
Štai nedidelė išvesties ištrauka, kai paleidžiu 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:test
Jei pašalinsiu kurią nors iš šių priklausomybių, testai nebus vykdomi.
Ko reikėtų, kad analizatorius veiktų su Spring Boot projektais? Išanalizuokime analizatorių.
Analizatoriaus klasių diagrama
Papildinys leidžia konfigūruoti kitą analizatorių:
Nurodykite naudojamą projekto priklausomybės analizatorių (plexus komponento vaidmens užuomina). Pagal numatytuosius nustatymus naudojamas maven-dependency-analyzer. Norėdami tai naudoti, turite deklaruoti šio papildinio, kuriame yra analizatoriaus kodas, priklausomybę. Analizatorius turi turėti deklaruotą „Plexus“ vaidmens pavadinimą ir čia nurodykite vaidmens pavadinimą.
Tipas :
java.lang.String
Nuo :
2.2
Reikalingas :
No
Vartotojo ypatybė :
analyzer
Numatytasis :
default
Galime sukurti bendrą analizatorių, kuris pakartotinai naudoja pirmiau minėtus dalykus, bet prideda specialų „Spring Boot“.
Dabartinė Maven analizatoriaus būsena nesuteikia jokios naudos šiuolaikiniams Spring Boot projektams. Esamas kodas yra atviras konfigūracijai ir netgi pratęsimui. Tačiau turėtume įterpti daug „Spring Boot“ logikos. Quarkus ir Micronaut projektams taip pat reikės specialaus kodo.
Nežinau, ar verta skirti laiko ir pastangų. Jei manote, kad taip, tikiuosi, kad šis tinklaraščio įrašas gali pasitarnauti kaip ankstyvoji analizė.
Norėdami eiti toliau:
Iš pradžių paskelbta „A Java Geek“ 2025 m. kovo 9 d