Je fais beaucoup de développement dans mon temps. Ces projets sur lesquels je travaille sont tous juste pour le plaisir et l'apprentissage (jusqu'à présent). Je fais couramment du développement Java avec Maven mais je suis également connu pour expérimenter en .NET et Python. Tous les projets sur lesquels je travaille utilisent des licences open source, bien que la plupart d'entre eux ne figurent sur aucun référentiel de code public.
Le développement Java / Maven nécessite que j'utilise une structure unique groupId
(par exemple "com.mydomain") et unique package
(répertoire), contenant généralement le groupId
développement while .NET encourage unique namespaces
dans lequel j'utilise des conventions similaires au package
concept Java . Pour garantir l'unicité, j'utilise généralement l'un de mes noms de domaine avec les parties inversées (par exemple "ca.jessewebb"); Je pense que c'est une pratique très courante.
Je suis dans les premières étapes de la création d'un nouveau projet Java / Maven open source (appelons-le "newproj") et je voudrais le mettre sur GitHub. Mon pseudo sur GitHub est « jessewebb » si cela lui donnera une URL comme: https://github.com/jessewebb/newproj
. Je ne veux pas déranger l' enregistrement du nom de domaine « newproj.com » alors j'ai décidé d'utiliser « ca.jessewebb » et « ca.jessewebb.newproj » comme groupId
et package
, respectivement.
Il m'est venu à l'esprit que la présence de mon identité personnelle dans le code et dans le domicile du projet (dans l'URL GitHub) incitera probablement un contributeur potentiel à réfléchir à deux fois avant de s'impliquer dans mon projet. C'est un problème, je ne veux pas que ce soit mon projet. Je préférerais que je transmette plutôt le message que je ne suis pas propriétaire du projet. Maintenant, en toute honnêteté, il est vraiment pas un gros problème parce que je doute mes projets recueilleront participation beaucoup communautaire mais je vois aussi cela comme encore plus d'une raison d'éviter toute possibilité de dissuader les cotisants-être.
Pour un autre exemple, j'ai créé un projet Google Code il y a quelques années (appelons-le "oldproj"). Lorsque j'ai créé le projet, je savais que j'allais l'héberger sur Google Code, j'ai donc utilisé le groupId
nom de package et "com.googlecode.oldproj", qui est l'inverse du nom de domaine par défaut que Google Code fournit à chaque nouveau projet. Cela s'est avéré être une idée pas si géniale; un an plus tard, je déplacé le code à un autre repo et je devais renommer ces identifiants (bien que je n'aimais ...). À l'époque, je ne possédais aucun nom de domaine et j'ai fini par acheter le nom de domaine "oldproj.com" et je l'ai utilisé. J'ai aimé cela car cela donnait au projet sa propre identité et je n'apposais pas mon nom sur le code partout. J'aurais pu tout aussi facilement enregistrer le nom de domaine "jessewebb.ca" et utiliser "ca.jessewebb.oldproj" comme nom de package, mais je ne l'ai pas fait car j'avais aussi les mêmes préoccupations à l'époque.
Donc ma question est ...
Comment puis-je éviter d'utiliser mes propres noms (de domaine) lors de la création de projets open source tout en conservant l'unicité des packages / espaces de noms?
Au fur et à mesure que les projets prennent de l'ampleur, il est logique d'enregistrer les noms de domaine, mais cela semble idiot et une perte d'argent de le faire plus tôt. Je me rends compte que je n'ai pas vraiment besoin de posséder le nom de domaine pour l'utiliser dans le code, mais cela ne va pas et peut conduire à un squatter qui vous l'arrache entre-temps. Que font les autres à propos de ce dilemme? Existe-t-il des exemples de projets open source populaires (largement utilisés, grande communauté, etc.) qui contiennent l'identité du développeur d'origine dans le cadre de ses propres identifiants?
la source
Réponses:
Dans mes projets, je leur donne un nom mais pas forcément un domaine. Ainsi, les noms de mes packages (et espaces de noms) ne sont généralement que "projectname.libraryname", quel que soit l'endroit où le code est hébergé.
Je suis habitué à .NET où cela est géré assez librement.
la source
Je ne me souviens pas où je l'ai vu, mais je l'ai vu suggéré d'utiliser une structure comme celle-ci:
YourIdentifier peut être quelque chose comme un domaine que vous possédez, votre alias Internet (assez unique), etc. Le nom du composant est laissé pour le code "de base" de votre produit. Par exemple, j'ai un petit framework MVC nommé BarelyMVC, donc j'ai des espaces de noms comme ceux-ci:
etc etc. Votre alias en ligne dans la plupart des cas est unique pour éviter les conflits entre les autres développeurs
Si vous avez peur d'utiliser votre propre alias en ligne, créez vous-même une "étiquette". Il n'a pas besoin d'être officiellement enregistré en tant qu'entreprise ou quoi que ce soit (ou même en tant que domaine). Par exemple, la
Json.Net
bibliothèque populaire utilise l'espace de nomsNewtonsoft.Json
. C'est évidemment basé sur le nom de famille des auteurs "newton", mais je ne pense pas que quiconque s'en soucie vraiment. Et si vous avez enregistré une entreprise officielle, vous pouvez bien sûr l'utiliser. La plupart des API publiques produites par mon entreprise, par exemple, ont des espaces de noms commençant parPreEmptiveSolutions
, le nom de l'entreprisela source
Il n'y a aucune règle selon laquelle les noms de packages Java ou les espaces de noms .NET sont des noms de domaine. Il n'est même pas nécessaire qu'ils soient uniques, bien que ce soit certainement une bonne idée. En fait, je pense que vous avez eu raison d'utiliser
com.googlecode.oldproj
, et à votre place, je ne serais pas passé àcom.oldproj
moins que j'essaie d'obtenir de la publicité pour le nouveau nom de domaine.la source
com.googlecode.oldproj
, pourquoi pensez-vous que c'était une bonne idée? Rétrospectivement, j'ai pensé qu'il était un peu idiot de lier le code au fournisseur d'hébergement.