Ich entwickle viel in meiner Freizeit. Diese Projekte, an denen ich arbeite, sind alle (bisher) nur zum Spaß und zum Lernen gedacht. Ich mache normalerweise Java-Entwicklung mit Maven, aber ich war auch dafür bekannt, in .NET und Python zu experimentieren. Alle Projekte, an denen ich arbeite, verwenden Open-Source-Lizenzen, obwohl sich die meisten von ihnen in keinem öffentlichen Code-Repository befinden.
Bei der Java / Maven-Entwicklung muss ich eine eindeutige groupId
(z. B. "com.mydomain") und eine eindeutige package
(Verzeichnis-) Struktur verwenden, die normalerweise die groupId
.NET-Entwicklung "unique" enthält, namespaces
in der ich ähnliche Konventionen wie das Java- package
Konzept verwende. Um die Eindeutigkeit zu gewährleisten, verwende ich normalerweise nur einen meiner Domainnamen mit umgekehrten Teilen (z. B. "ca.jessewebb"). Ich glaube, das ist eine sehr verbreitete Praxis.
Ich bin in der Anfangsphase der Erstellung eines neuen Open Source Java / Maven-Projekts (nennen wir es "newproj") und möchte es auf GitHub veröffentlichen. Mein Benutzername auf GitHub ist „jessewebb“ , so das es eine URL geben wie: https://github.com/jessewebb/newproj
. Ich möchte nicht die Mühe machen, den Domainnamen "newproj.com" zu registrieren, daher habe ich mich entschieden, "ca.jessewebb" und "ca.jessewebb.newproj" als groupId
und zu package
verwenden.
Mir ist der Gedanke gekommen, dass das Vorhandensein meiner persönlichen Identität im Code und als Teil der Projekt-Homepage (in der GitHub-URL) einen potenziellen Mitwirkenden dazu veranlassen wird, zweimal über eine Beteiligung an meinem Projekt nachzudenken. Das ist ein Problem, ich möchte nicht, dass es mein Projekt ist. Ich würde es vorziehen, wenn ich stattdessen die Nachricht übermitteln könnte, dass mir das Projekt nicht gehört. Um ehrlich zu sein, ist es keine so große Sache, denn ich bezweifle, dass meine Projekte viel Engagement in der Gemeinde mit sich bringen werden, aber ich sehe dies auch eher als Grund, um die Möglichkeit zu vermeiden, potenzielle Mitwirkende abzuschrecken.
Als weiteres Beispiel habe ich vor einigen Jahren ein Google Code-Projekt erstellt (nennen wir es "oldproj"). Als ich das Projekt erstellte, wusste ich, dass ich es auf Google Code groupId
hosten würde. Daher habe ich den Paketnamen "com.googlecode.oldproj" verwendet. Dies ist die Umkehrung des Standard-Domainnamens, den Google Code für jedes neue Projekt bereitstellt. Es stellte sich heraus, dass dies keine so gute Idee war. ein Jahr später, ich den Code in einem anderen Repo bewegt und ich hatte diese Bezeichner umbenennen (gut habe ich nicht habenzu aber ...). Zu der Zeit besaß ich keine Domainnamen und kaufte schließlich den Domainnamen "oldproj.com" und benutzte ihn. Das gefiel mir, weil es dem Projekt eine eigene Identität verlieh und ich nicht überall meinen Namen in den Code eingeprägt habe. Ich hätte genauso gut den Domainnamen "jessewebb.ca" registrieren und "ca.jessewebb.oldproj" als Paketnamen verwenden können, aber ich tat es nicht, weil ich damals die gleichen Bedenken hatte.
Also meine Frage ist ...
Wie kann ich vermeiden, meine eigenen (Domain-) Namen beim Erstellen von Open Source-Projekten zu verwenden, ohne die Eindeutigkeit von Paketen / Namespaces zu beeinträchtigen?
Da Projekte an Dynamik gewinnen, ist es sinnvoll, die Domain-Namen zu registrieren, aber es scheint albern und eine Verschwendung von Geld, dies früher zu tun. Ich weiß , dass ich nicht wirklich haben , besitzen den Domain - Namen , um es im Code zu verwenden , aber das fühlt sich falsch und kann zu einem Squatter führen es unter Ihnen in der Zwischenzeit schnappend. Was tun andere Menschen gegen dieses Dilemma? Gibt es Beispiele für populäre (weit verbreitete, große Community usw.) Open Source-Projekte, die die Identität des ursprünglichen Entwicklers als Teil ihrer eigenen Kennung (en) enthalten?
quelle
Antworten:
In meinen Projekten gebe ich ihnen einen Namen, aber nicht unbedingt eine Domain. Daher sind meine Paketnamen (und Namespaces) normalerweise nur "projectname.libraryname", unabhängig davon, wo der Code gehostet wird.
Ich bin an .NET gewöhnt, wo dies ziemlich frei gehandhabt wird.
quelle
Ich kann mich nicht erinnern, wo ich es gesehen habe, aber ich habe es vorgeschlagen, eine Struktur wie diese zu verwenden:
YourIdentifier kann so etwas wie eine Domain sein, die Sie besitzen, Ihr (ziemlich eindeutiger) Internet-Alias usw. usw. Der Komponentenname wird für den "Kern" -Code Ihres Produkts weggelassen. Zum Beispiel habe ich ein kleines MVC-Framework namens BarelyMVC, also habe ich folgende Namespaces darin:
etc etc. Ihr Online-Alias ist in den meisten Fällen eindeutig genug, um Konflikte zwischen anderen Entwicklern zu vermeiden
Wenn Sie Angst haben, einen eigenen Online-Alias zu verwenden, erstellen Sie ein "Label" für sich. Es muss nicht offiziell als Unternehmen oder irgendetwas (oder sogar als Domain) registriert sein. Beispielsweise verwendet die beliebte
Json.Net
Bibliothek den NamespaceNewtonsoft.Json
. Es basiert offensichtlich auf dem Nachnamen "Newton" des Autors, aber ich glaube, das interessiert niemanden wirklich. Und wenn Sie eine formelle Firma registriert haben, können Sie diese natürlich nutzen. Die meisten von meinem Unternehmen erstellten öffentlichen APIs haben beispielsweise NamespacesPreEmptiveSolutions
, die mit dem Namen des Unternehmens beginnenquelle
Es gibt keine Regel, dass Java-Paketnamen oder .NET-Namespaces Domänennamen sind. Es gibt nicht einmal die Anforderung, dass sie einzigartig sind, obwohl das sicherlich eine gute Idee ist. Ich glaube tatsächlich, dass Sie Recht hatten
com.googlecode.oldproj
, und in Ihren Schuhen hätte ich nicht gewechselt,com.oldproj
wenn ich nicht versucht hätte, Werbung für den neuen Domainnamen zu machen.quelle
com.googlecode.oldproj
, warum denkst du, war das eine gute Idee? Im Nachhinein fand ich es irgendwie albern, den Code an den Hosting-Provider zu binden.