Quale convenzione di denominazione dei pacchetti usi per progetti personali / hobby in Java?


143

Ho già familiarità con la convenzione standard di denominazione dei pacchetti Java sull'utilizzo di un nome di dominio per creare un nome di pacchetto univoco (ovvero pacchetto com.stackoverflow.widgets). Tuttavia, non ho mai visto alcun consiglio su come scegliere i nomi dei pacchetti per i progetti personali. Presumo perché questo è perché è davvero una questione di gusti personali.

Quindi, come scegliere i nomi dei pacchetti per progetti personali che non saranno mai realizzati in produzione (potresti sperimentare un nuovo framework nel tuo tempo libero). Supponendo che non si disponga di un sito Web personale il cui dominio è possibile utilizzare per creare la struttura del pacchetto, cosa si fa (o si farebbe)? Hai un sistema logico in atto per generare nuovi nomi di pacchetti per progetti di hobby o usi semplicemente nomi di pacchetti usa e getta come mypackage?

Dal momento che sono solo curioso di vedere quali sono i pensieri delle diverse persone su questo, ho fatto di questo un wiki della comunità.

Personalmente, non ci ho mai pensato molto, ma stasera volevo giocare con Wicket e mi è venuto in mente che non ho un'idea chiara di come voglio organizzare i miei progetti di hobby. Una convenzione di denominazione dei pacchetti distinta e distinta per i progetti di hobby (almeno secondo me) sarebbe un buon modo per mantenere il codice personale e relativo al lavoro chiaramente separato l'uno dall'altro.

Stavo pensando a una semplice convenzione di denominazione gerarchica, per mantenere la fonte dei miei progetti personali in un'unica cartella radice:

  • Utilizzare myprojectscome cartella principale
  • Aggiungi il nome del progetto
  • Aggiungi eventuali nomi di pacchetti secondari aggiuntivi

Quindi, il mio progetto Wicket sarebbe nel pacchetto myprojects.learningwickete test unitari sarebbero nel pacchetto myprojects.learningwicket.tests(per esempio).


1
Comune, procuratevi un dominio personale (firstname-lastname.net) e usatelo come nome del pacchetto. Lo scopo del pacchetto è di essere unico a livello globale, quindi i myproject non lo tagliano davvero.
Vladimir Dyuzhev,

5
L'uso di un dominio .onion è anche un'opzione (come onion.duskgytldkxiuqc6.packagename). Finché la chiave privata rimane segreta, hai il controllo del nome di dominio. Quindi è gratuito registrarsi (generare) ed è permanente (a differenza dei domini convenzionali). È conforme alla lettera della convenzione Java e ti identifica in modo univoco.
sastanin,

14
Puoi sempre creare un account GitHub e utilizzare io.github.username. *.
Bardi Harbor,

2
@BardiHarborow grazie, ho usato il tuo suggerimento.
Nick Volynkin,

3
@GabrielBB, GitHub Pages consente di ospitare siti HTML e Jekyll su yourusername.github.io, e pertanto i sottodomini di github.io sono più "garantiti" per corrispondere agli utenti GitHub rispetto ai sottodomini di github.com (che potrebbero essere utilizzati per interni Progetti GitHub in qualsiasi momento).
Bardi Harborow,

Risposte:


49

Se stai solo facendo progetti personali in cui nessun altro utilizzerà il codice, puoi creare un nome di pacchetto che ti piace. Non inventare qualcosa che inizia con com.o net.o altri domini di primo livello, perché ciò implicherebbe la proprietà del nome di dominio (ad es. Utilizzandocom.john come nome del pacchetto solo perché il tuo nome è John non è una buona idea) .

Se hai intenzione di dare il codice a chiunque altro, dovresti usare un nome di pacchetto univoco a livello globale, che secondo le convenzioni Java significa che dovresti registrarti e usare un nome di dominio.


1
Quindi, se voglio indirizzare il nome del pacchetto come com.xyzdovrebbe essere registrato da qualche parte questo nome del pacchetto ?? PS xyzè il mio cliente.
Prasad,

9
Mi chiedo se posso usare il mio ID github per quel dominio e github? Ad esempio com.github.mygithubid.myproject?
Kirill G.,

2
@KirillG. Vorrei in qualche modo sconsigliarlo, poiché gli ID GitHub possono essere modificati in qualsiasi momento, in qualsiasi numero di volte. Concesso, qualsiasi dominio può cambiare, ma non così facilmente o spesso (non normalmente comunque). Anche se credo che sia OK per i progetti di hobby.
Sara

26

Uso solo le mie iniziali: fg.nameofproject.etc

Riduce la digitazione. Può essere prefissato in qualsiasi momento con sf.net o com. o org. o com.google ..

Dato che il progetto è personale, trattalo in modo speciale proprio come la tua camicia regalo personalizzata appena pressata: ti farà sentire bene.


42
bond.james.007
Fai clic su Aggiorna

19
@clicca secondo le linee guida che sarebbero bond.james._007- non ha lo stesso squillo ...: - {
corsiKa

20
pmurray_at_bigpond_dot_com.project.package

2
+1. Intelligente. Questo ti dà un nome di pacchetto univoco e identifica l'autore tutto in una volta.
Mike Spross,

19

<sarcasm>Bah. Ogni programmatore che si rispetti avrebbe il proprio nome di dominio. Questa è chiaramente una domanda trabocchetto. Ognuno ha il proprio nome di dominio personale! </sarcasm>:-)

Ok, con tutta serietà, l'acquisto di un nome di dominio personalizzato è probabilmente l'opzione più semplice. Per circa $ 10 all'anno, puoi trovare fornitori affidabili per ospitare il dominio e inoltrare la posta elettronica.


18
Stranamente, anche questo aumenterà la tua autostima.
James,

26
Buona risposta, ma un programmatore di partenza probabilmente non vuole acquistare un sito Web solo per seguire alcuni tutorial o video su come creare una GUI con un pulsante di chiusura.
Jochem Kuijpers,

17

Devo conservare la maggior parte dei miei progetti hobby in Google Code, così mi basta usare il sito del progetto, come il nome del pacchetto: com.googlecode.donkirkby.someproject.


8
Quanto ciechi potremmo essere stati di non vedere la follia delle nostre azioni ?!
Joey Sabey,

1
Ti manca il codice di Google, @Joey? Ho usato GitHub principalmente negli ultimi anni, quindi ho dovuto trasferire alcuni dei miei vecchi progetti da Google Code prima che si chiudessero.
Don Kirkby,

Quindi hai rinominato i pacchetti, conservato i nomi dei googlecode o ...?
serv-inc,

1
Non ho usato nessuno del vecchio codice da quando l'ho spostato, @ serv-inc. Entrambe le opzioni avrebbero funzionato.
Don Kirkby,

3

mi chiamo anjan

di solito uso com.anjan

Ho una mia compagnia di fantasia - a volte la uso

la tradizione con sourceforge (come mostrato in ibernazione e altri pacchetti) è net.sf. *

quindi, a seconda del tuo umore, puoi andare con quello.


13
A meno che tu non possieda anche anjan.com, penso che tu abbia talmente torto a farlo.
Fredrik,

7
@Fredrick per fortuna, sembra che anjan.com non rilascerà presto nessuna libreria.
corsiKa

1
@corsiKa: hai ragione, fintanto che non rilascerò nulla, sto bene. :-)
anjanb,

3
@anjanb Bene, sono andato sul loro sito web. Fanno cibo per animali domestici. Non sono un esperto, ma la maggior parte delle aziende produttrici di alimenti per animali domestici non rilasciano molte librerie software =)
corsiKa

3

Penso che tu l'abbia risolto. La tentazione di evitare qui è di non preoccuparsi affatto del nome di un pacchetto. È facile salvare alcune sequenze di tasti perché "Sto solo scrivendo un po 'di codice di prova". Ma poi il codice diventa buono, utile e grande, e poi ti rendi conto di avere un solido inizio per quella che potrebbe essere una libreria o un'applicazione di lunga durata. Potrebbe non essere una libreria o un'applicazione che lasci mai la tua rete domestica, ma il punto è che non hai pensato in anticipo. Questo è il fantasma danese dell'informatica: pensa sempre al futuro, anche se solo un po '.

La convenzione di denominazione che utilizzo per il mio codice hobby è molto simile alla tua. Ho una directory di livello superiore denominata "futura" (lunghe, noiose ragioni per cui quel nome è nato) a cui pende tutto il mio codice. Cerco di organizzare il mio codice in librerie di pacchetti, anche se potrebbe essere una classe o un pacchetto che non uso mai per un altro progetto. Metto tutte le applicazioni (ovvero qualsiasi cosa che abbia un vuoto principale (String [] args) nella classe) nella cartella futura.app. *. Cerco anche di imitare i nomi dei pacchetti della libreria Java standard per il mio codice, anche se in un paio di casi ho rotto la convenzione a causa dei miei gusti (cioè futura.inet per Internet, non semplicemente socket, codice e futura.collections per non -util stuff.) Per parafrasare David Mamet: sii sempre generico. Sii sempre generico!

Dalla cura che hai usato per pubblicare la domanda, sospetto che anche tu sia d'accordo con il mio ultimo punto: non devi trattare l'hacking da hobbista come un progetto a livello aziendale, ma se porti un po 'di quella disciplina nel gioco casalingo, l'hobby è tanto più gratificante.


2

Uso il mio URL OpenID e quindi aggiungo il nome del mio progetto. per esempio, com.myopenid.cd1.twitterè il pacchetto radice di un client Twitter che ho sviluppato.


Mi è piaciuto, ma poi ho capito che non esiste più. :( janrain.com/myopenid-service-ends "Dal 1 ° febbraio 2014 il servizio MyOpenID è stato disattivato."
successhawk


1

Uso solo il mio nome: surname.initials.xxx, come un bel compromesso tra brevità ed evitamento delle collisioni. Ho pensato che avrebbe dato un ragionevole spazio dei nomi libero da collisioni se avessi mai scelto di pubblicare pubblicamente il codice. Ho anche un piccolo programma che ho scritto che può riconfezionare interi alberi di directory, quindi ho pensato che avrei mai avuto bisogno di riconfezionare per la pubblicazione è abbastanza indolore ... quindi non ho perso troppo sonno su di esso.

Dopo il cognome.initials.xxx, uso entrambe le app per i pacchetti di applicazioni, lib per i pacchetti di librerie e tst per cose con cui sto puramente sperimentando.


1

cosa ne pensi di cognome.firstname.project ??? come luz.marlon.project?


16
Potrebbe funzionare per te, ma John Smith e Bob Jones potrebbero incorrere in conflitti quando un giorno vogliono rilasciare il loro codice.
Bill the Lizard,

0

Ho pensato di fare questa stessa domanda. Finora ho usato il prefisso com.tehvan, anche se in realtà non ho una società.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.