API pubblica privata di separazione Gradle / Java

2

Ho un progetto che ha un'API pubblica e un codice interno.

La parte pubblica è pubblicata su MavenCentral.

Ho pensato di creare un pacchetto ciascuno, ma tutto dal pacchetto "interno" a cui è necessario accedere dal pacchetto "api" deve essere pubblico, quindi disponibile dal POV dell'utente finale.

Attualmente, ciò che viene fatto è che la parte API è un progetto Gradle e la parte "interna" è un sottoprogetto del progetto API. In questo modo, se si importa l'API, Gradle conosce la dipendenza tra entrambi, ma non darà accesso al codice interno. Fin qui, tutto bene.

Il problema è con la pubblicazione su MavenCentral - viene pubblicato solo il progetto root.

Quindi posso:

  1. Pubblica i sottoprogetti su MavenCentral - ma sono interni, quindi è strano pubblicarli!
  2. Raggruppa tutto in un singolo progetto e usa i pacchetti Java - ma qualcosa a cui è necessario accedere da un pacchetto a un altro è quindi parte dell'API pubblica (% parola chiave% di%) quindi sto esponendo parte delle cose interne ( ma non molto)
  3. Raggruppa tutto in un unico pacchetto, così posso usare public livelli di accessibilità - ma è solo un po 'caotico ...

Che cosa faresti per risolvere questo problema? C'è anche un altro modo per farlo?

Ho sentito parlare di Jigsaw Modules in Java 9, ma non posso usarli (la lib deve essere compatibile con Android, quindi Android 8 al massimo)

    
posta CLOVIS 14.07.2018 - 20:21
fonte

1 risposta

1

Questo è esattamente il motivo per cui un sistema come Jigsaw era così disperatamente necessario: non esiste una buona soluzione prima di Java 9.

Vorrei prendere la tua prima opzione e pubblicare tutto il codice su Maven Central.

    
risposta data 17.07.2018 - 20:09
fonte

Leggi altre domande sui tag