Ho scritto un custom taglet library con nomi che iniziano con con un punto: .codelet
, .codelet.and.out
, eccetera. È compilato con JDK 7.JDK 1.7 consente tag personalizzati con nomi * che iniziano * con un punto. JDK 1.8 lo proibisce?
Quando si genera JavaDoc utilizzando 1.7 javadoc.exe
, funziona correttamente. Ma quando si generano con JDK 8, non riesce a causa
C:\...\Temp.java:5: error: no tag name after @
* {@.codelet mypkg.Temp}`
se cambio il codice utilizzando il taglet (non il codice taglet stesso) per {@codelet mypkg.Temp}
:
C:\...\Temp.java:5: error: unknown tag: codelet
* {@codelet mypkg.Temp}
Note: Custom tags that were not seen: @.codelet
1 error
Modifica del nome nel codice sorgente taglet da cod.elet
(code.let
non è valido perché code
è un nome di tag già esistente) e, utilizzando tale nuovo nome, funziona.
La documentazione strumento JavaDoc per la -tag
option (vicino alla parte inferiore della sezione) afferma:
Evitare i conflitti: Se si desidera creare il proprio spazio dei nomi, quindi è possibile utilizzare una convenzione di denominazione separata da punti simile a quello utilizzato per i pacchetti: com.mycompany.todo. Oracle continuerà a creare tag standard i cui nomi non contengono punti. Qualsiasi tag creato sostituirà il comportamento di un tag con lo stesso nome definito da Oracle. Se crei un tag o taglet @todo, ha sempre lo stesso comportamento che definisci, anche quando Oracle crea successivamente un tag standard con lo stesso nome.
Quindi mi manca qualcosa qui? O si tratta di una modifica non documentata che fa davvero schifo? Perché richiede un cambiamento abbastanza grande nella mia biblioteca, se è così.
FYI: Taglet overview docs
Direi che probabilmente è solo una modifica non documentata. Penso che l'assunto sia che gli identificatori di Java, in generale, non iniziano con un punto.Ad esempio, i nomi dei pacchetti, AFAIK, non possono iniziare con un punto. Probabilmente è un errore che questo è stato permesso nelle versioni precedenti. Non puoi semplicemente cambiare il nome del tuo taglet in "codelet", o nel peggiore dei casi, "aliteralmind.codelet"? – GreyBeardedGeek
È una libreria pubblica che viene utilizzata da migliaia e migliaia di programmatori Java in tutto il mondo (lasciatemi sognare). I nomi dei taglet attuali e futuri possono essere deprecati e devono essere creati taglet di nuova nomina per sostituirli. Non spaccare il cervello, ma richiede molto tempo. È un grande dolore. È * consigliato * di usare punti per evitare conflitti con i futuri taglet Sun, quindi vado con 'cod.elet' (shudder). – aliteralmind
Un grande dolore che avresti potuto evitare aderendo a ciò che hai citato: "usa una convenzione di denominazione separata da punti simile a quella usata per i pacchetti". Niente conferma l'idea che i punti chiave dovrebbero funzionare. Alla fine, non capisco perché hai anteposto i tuoi nomi con un punto. Gli spazi dei nomi avevano lo scopo di risolvere potenziali ambiguità, che funzionano solo se gli sviluppatori scelgono spazi dei nomi unici, ma se non si sceglie uno spazio dei nomi unico non è necessario utilizzarli ... – Holger