diffplug / diffplug/spotless

Support build agnostic external plugin SPI with dynamic lookups

Aperta
#2,288 1 commento 0 reazioni 0 assegnatari Vedi su GitHub
enhancement
Lingua principale
Java
Stelle
5.6k
Fork
559
Merge medio
1g 14h
PR unite (30g)
43

Descrizione

Currently adding a [custom plugin](https://github.com/diffplug/spotless/blob/main/CONTRIBUTING.md#how-to-add-a-new-plugin-for-a-build-system) requires adaptations to the Maven/Gradle plugin as
a) [FormatterStepFactory](https://github.com/diffplug/spotless/blob/main/plugin-maven/src/main/java/com/diffplug/spotless/maven/FormatterStepFactory.java#L22) and
b) [FormatterFactory](https://github.com/diffplug/spotless/blob/main/plugin-maven/src/main/java/com/diffplug/spotless/maven/FormatterFactory.java#L52) or [FormatExtension](https://github.com/diffplug/spotless/blob/b2a2cbb8b6026397c0adb8cb8b3571e399276f9b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/FormatExtension.java#L79)

are
a) not build system agnostic and
b) are not dynamically looked up

It would be beneficial to have a build-agnostic plugin SPI which allows to
a) load dependencies
b) pass configuration
c) dynamically lookup services from classpath (e.g. with https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/ServiceLoader.html)

For Maven the mechanism for adding additional classes to the plugin classpath is via [plugin dependencies](https://maven.apache.org/guides/mini/guide-configuring-plugins.html#Using_the_.3Cdependencies.3E_Tag). I hope that Gradle provides something similar.

Guida per i contributori

Apri la guida per i contributori

Direzione di ricerca

Inizia leggendo CONTRIBUTING.md e gli entry point FormatterStepFactory, FormatterFactory e FormatExtension collegati, nei plugin Maven e Gradle. Confronta il modo in cui ciascuno aggiunge attualmente plugin personalizzati e analizza i riferimenti a ServiceLoader e alle dipendenze dei plugin Maven menzionati nell’issue. Il lavoro è completato quando uno SPI indipendente dal sistema di build può caricare dipendenze, accettare la configurazione e scoprire dinamicamente servizi esterni per entrambe le integrazioni.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
java
Ambito
build-system, tooling
Tipo di issue
Funzionalità
Difficoltà
5/5
Tempo stimato
Più di una settimana
Stato di attività
Ferma
Chiarezza
Da chiarire
Idoneità per principianti
30/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.