291 lukemat

Mavenin riippuvuusanalysaattorin käyttäminen käyttämättömistä riippuvuuksista eroon on vaarallinen neuvo tänään

kirjoittaja Nicolas Fränkel4m2025/03/13
Read on Terminal Reader

Liian pitkä; Lukea

Maven-analysaattorin nykyinen tila ei tarjoa mitään hyötyä nykyaikaisille Spring Boot -projekteille.
featured image - Mavenin riippuvuusanalysaattorin käyttäminen käyttämättömistä riippuvuuksista eroon on vaarallinen neuvo tänään
Nicolas Fränkel HackerNoon profile picture


Äskettäin hyvä ystäväni Richard Fichtner neuvoi käyttämään mvn dependency:analyze -komentoa päästäksesi eroon ilmoitetuista, mutta käyttämättömistä riippuvuuksista:

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.

mvn dependency:analyze -komento

Maven käyttää laajennusarkkitehtuuria; yllä olevassa komennossa laajennus on maven-dependency-plugin . Laajennuksella on useita toisiinsa liittyviä tavoitteita . Tässä 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 test-compile - käytä sen sijaan dependency:analyze-only -tavoitetta osallistuessasi koontiversion elinkaareen.


Oletusarvoisesti analyysin suorittamiseen käytetään maven-dependency-analyzer , mutta rajoitukset johtuvat siitä, että se toimii tavukooditasolla, mutta mikä tahansa analysaattori voidaan kytkeä analyzer kautta.


-- riippuvuus: analysoi


maven-dependency-analyzer on jaettu Maven-komponentti. Sen kuvaus on melko kuvaava:


Analysoi projektin riippuvuuksia ilmoittamattomien tai käyttämättömien esineiden varalta.

Varoitus : Koska analyysi tehdään tavukoodille 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.


Pääkomponentti on ProjectDependencyAnalyzer , joka käyttää ClassAnalyzer ja DependencyAnalyzer .


-- Maven-dependency-analyzer


Varoitus osoittaa selvästi, että se toimii tavukooditasolla . Siinä mainitaan erityisesti, että se ei ota huomioon lähdetason huomautuksia.

Spring Boot käynnistimet

Kuvasin oman Spring Boot -käynnistimen suunnittelua kauan sitten, eikä se ole juurikaan muuttunut sen jälkeen. Jos olet uusi Spring Bootin aloittelijoissa, tässä on yhteenveto.


SpringBoot luottaa AutoConfiguration-luokkiin. AutoConfiguration-luokat ovat tavallisia konfigurointiluokkia, eli ne vaikuttavat sovellusluokkiin. Voit määrittää erityisiä aktivointiehtoja, kuten Spring-ominaisuuden, mutta ne eivät liity automaattiseen määritykseen.


Tässä on hyvin yksinkertaistettu kulku:


Spring Bootin automaattisen määrityksen yksinkertaistettu järjestyskaavio


Spring Bootin mukana tuleva JAR on org.springframework.boot:spring-boot-autoconfigure . Voit tarkistaa sen META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports sisällön:


 ... 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 }
  1. Aseta automaattisen konfiguroinnin luokkien järjestys
  2. Aktivoi, jos RestTemplate -luokka on luokkapolulla
  3. Aktivoi, jos emme ole reaktiivisessa verkkosovelluskontekstissa


Huomaa, että luokan latausohjelma lataa RestTemplateAutoConfiguration -luokan hienosti riippumatta siitä, onko RestTemplate 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 erikseen .

maven-dependency-analyzer tuominen nykyaikaan

Committers suunnitteli analysaattorin vuonna 2007: tältä 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.


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.


Analysaattorin luokkakaavio


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:





Julkaistu alun perin A Java Geekissä 9. maaliskuuta 2025

Trending Topics

blockchaincryptocurrencyhackernoon-top-storyprogrammingsoftware-developmenttechnologystartuphackernoon-booksBitcoinbooks