2015-02-25 20 views
9

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

+1

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

+0

È 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

+1

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

risposta

4

Così mi sto perdendo qualcosa qui?

Ebbene, la sezione della documentazione che hai citato dice:

"... quindi è possibile utilizzare una convenzione di denominazione separata da punti simile a quello usato per i pacchetti: com.mycompany.todo "

Nota che si dice '', non convenzione di denominazione 'nomi separati da punti con i puntini in loro'.

Si noti che "simile a quello utilizzato per i pacchetti". Se hai provato ad usare ".mypackage" come nome di un pacchetto, il compilatore direbbe "Assolutamente no!".

La mia lettura è che il nome del tag ".codelet" non soddisfa i criteri definiti nella documentazione. Quindi, ciò che è successo è che la versione Java 8 di javadoc è stata modificata per applicare rigorosamente le regole di denominazione dei taglet. Questa è una sfortuna dal tuo punto di vista, ma alla fine il problema è nei tuoi commenti javadoc, non nello strumento.

Problemi correlati