Äskettäin hyvä ystäväni Richard Fichtner neuvoi käyttämään -komentoa päästäksesi eroon ilmoitetuista, mutta käyttämättömistä riippuvuuksista: mvn dependency:analyze https://bsky.app/profile/did:plc:cc2k5egfzqpf3nbjrs5xox4r/post/3lcxfnsc2h62m?ref_src=embed&embedable=true Vaikka se oli hyvä idea vuosia sitten, se on vaarallinen neuvo tänään. Tässä viestissä haluaisin selittää, mitä laajennus tekee ja miksi sinun ei pitäisi käyttää sitä, mutta mitä yksinkertaisimmissa projekteissa. -komento mvn dependency:analyze Maven käyttää laajennusarkkitehtuuria; yllä olevassa komennossa laajennus on . Laajennuksella on useita toisiinsa liittyviä . Tässä . maven-dependency-plugin tavoitteita analyze Analysoi tämän projektin riippuvuuksia ja määrittää, mitkä ovat: käytetty ja ilmoitettu; käytetty ja ilmoittamaton; käyttämätön ja ilmoitettu. Tämä tavoite on tarkoitettu käytettäväksi itsenäisenä, joten se suorittaa aina - käytä sen sijaan -tavoitetta osallistuessasi koontiversion elinkaareen. test-compile dependency:analyze-only Oletusarvoisesti analyysin suorittamiseen käytetään , mutta rajoitukset johtuvat siitä, että se toimii tavukooditasolla, mutta mikä tahansa analysaattori voidaan kytkeä kautta. maven-dependency-analyzer analyzer -- riippuvuus: analysoi on jaettu Maven-komponentti. Sen kuvaus on melko kuvaava: maven-dependency-analyzer Analysoi projektin riippuvuuksia ilmoittamattomien tai käyttämättömien esineiden varalta. : Koska analyysi tehdään eikä lähteelle, joitain tapauksia ei havaita, mukaan lukien vakiot, huomautukset, joissa säilytetään vain lähdekoodi, ja linkit Javadocissa. Tämä voi johtaa vääriin tuloksiin, kun nämä ovat ainoita riippuvuuden käyttötarkoituksia. Varoitus tavukoodille Pääkomponentti on , joka käyttää ja . ProjectDependencyAnalyzer ClassAnalyzer DependencyAnalyzer -- Maven-dependency-analyzer Varoitus osoittaa selvästi, että se toimii . Siinä mainitaan erityisesti, että se ei ota huomioon lähdetason huomautuksia. tavukooditasolla Spring Boot käynnistimet Kuvasin suunnittelua kauan sitten, eikä se ole juurikaan muuttunut sen jälkeen. Jos olet uusi Spring Bootin aloittelijoissa, tässä on yhteenveto. oman Spring Boot -käynnistimen SpringBoot luottaa AutoConfiguration-luokkiin. AutoConfiguration-luokat ovat tavallisia konfigurointiluokkia, ne vaikuttavat sovellusluokkiin. Voit määrittää erityisiä aktivointiehtoja, kuten Spring-ominaisuuden, mutta ne eivät liity automaattiseen määritykseen. eli Tässä on hyvin yksinkertaistettu kulku: Spring Bootin mukana tuleva JAR on . Voit tarkistaa sen sisällön: 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.WebServiceTemplateAutoConfiguration Tässä on esimerkkinä : RestClientAutoConfiguration @AutoConfiguration(after = { HttpClientAutoConfiguration.class, HttpMessageConvertersAutoConfiguration.class }) //1 @ConditionalOnClass(RestTemplate.class) //2 @Conditional(NotReactiveWebApplicationCondition.class) //3 public class RestTemplateAutoConfiguration { // Class body } Aseta automaattisen konfiguroinnin luokkien järjestys Aktivoi, jos -luokka on luokkapolulla RestTemplate Aktivoi, jos emme ole reaktiivisessa verkkosovelluskontekstissa Huomaa, että luokan latausohjelma lataa -luokan hienosti luokka luokkapolulla vai ei! Jousi hyödyntää tätä mekanismia täysillä, kuten yllä näkyy. Käytännössä huomautuksiin määritettyjen luokkien ratkaisemista lykätään, kunnes niitä käytetään . RestTemplateAutoConfiguration riippumatta siitä, onko RestTemplate erikseen tuominen nykyaikaan maven-dependency-analyzer Committers suunnitteli analysaattorin vuonna 2007: se näytti silloin. Spring Boot käynnistyi myöhemmin, vuonna 2010. Tästä syystä analysaattori ei ottanut viivästettyä luokkalatausta annotaatioissa. Huomaa, että näin ei edelleenkään ole; projekti ei saa paljon rakkautta. tältä Kun käytät laajennusta Spring Boot -projektissa, saat paljon vääriä positiivisia tuloksia. Kokeilin sitä yksinkertaisella Spring Boot -projektilla käyttäen WebFluxia ja R2DBC:tä PostgreSQL:ssä. Tässä on pieni ote tuloksesta, kun suoritan : 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 Jos poistan jonkin näistä riippuvuuksista, testejä ei suoriteta. Mitä tarvitaan, jotta analysaattori toimisi Spring Boot -projektien kanssa? Analysoidaan analysaattori. Plugin mahdollistaa toisen analysaattorin määrittämisen: Määritä käytettävä projektin riippuvuusanalysaattori (plexuskomponentin roolivinkki). Oletusarvoisesti käytetään maven-dependency-analyzeria. Jotta voit käyttää tätä, sinun on ilmoitettava riippuvuus tälle laajennukselle, joka sisältää analysaattorin koodin. Analysaattorilla on oltava ilmoitettu Plexus-roolin nimi, ja määrität roolin nimen tässä. : Tyyppi java.lang.String : Alkaen 2.2 : Pakollinen No : Käyttäjän ominaisuus analyzer : Oletus default -- riippuvuus: analysoi Voimme luoda kokonaisanalysaattorin, joka käyttää yllä olevaa uudelleen, mutta lisää yhden Spring Bootiin. Johtopäätös Maven-analysaattorin nykyinen tila ei tarjoa mitään hyötyä nykyaikaisille Spring Boot -projekteille. Olemassa oleva koodi on avoin määrityksille ja jopa laajennuksille. Meidän olisi kuitenkin upotettava paljon Spring Boot -logiikkaa. Quarkus- ja Micronaut-projekteissa tarvitsisimme myös erillisen koodin. En tiedä, onko se ajan ja vaivan arvoista. Jos luulet niin, toivon, että tämä blogikirjoitus voi toimia varhaisen vaiheen analyysinä. Jos haluat mennä pidemmälle: riippuvuus: analysoida Maven Dependency Analyzer Oman Spring Boot -käynnistimen suunnittelu – osa 1 Oman Spring Boot -käynnistimen suunnittelu – osa 2 Julkaistu alun perin 9. maaliskuuta 2025 A Java Geekissä