Как я могу избежать использования моего собственного имени в идентификаторах, пакетах или пространствах имен проектов с открытым исходным кодом, которые я создаю?


15

Я много занимаюсь разработкой в ​​свое время. Эти проекты, над которыми я работаю, предназначены только для развлечения и обучения (пока). Я обычно занимаюсь разработкой Java с Maven, но я также знаю, что увлекаюсь .NET и Python. Все проекты, над которыми я работаю, используют лицензии с открытым исходным кодом, хотя большинство из них не включены ни в какие общедоступные репозитории кода.

Разработка Java / Maven требует, чтобы я использовал уникальную groupId(например, «com.mydomain») и уникальную package(каталог) структуру, обычно содержащую в groupIdто время, как разработка .NET поощряет уникальность, namespacesв которой я использую соглашения, аналогичные packageконцепции Java . Чтобы гарантировать уникальность, я обычно просто использую одно из своих доменных имен с переставленными частями (например, «ca.jessewebb»); Я считаю, что это очень распространенная практика.

Я нахожусь на начальных этапах создания нового проекта Java / Maven с открытым исходным кодом (назовем его «newproj»), и я хотел бы разместить его на GitHub. Мое имя пользователя на GitHub является «jessewebb» , так что это даст ему URL , как: https://github.com/jessewebb/newproj. Я не хочу беспокоиться о регистрации доменного имени "newproj.com", поэтому я решил использовать "ca.jessewebb" и "ca.jessewebb.newproj" в качестве groupIdи package, соответственно.

Мне пришло в голову, что присутствие моей личной личности в коде и как части дома проекта (в URL GitHub), вероятно, заставит потенциального участника дважды подумать о том, чтобы принять участие в моем проекте. Это проблема, я не хочу, чтобы это был мой проект. Я бы предпочел, если бы я мог вместо этого передать сообщение, что я не являюсь владельцем проекта. Теперь, честно говоря, это действительно не так уж важно, потому что я сомневаюсь, что мои проекты привлекут большое участие сообщества, но я также считаю это еще большей причиной, чтобы избежать какой-либо возможности удержать потенциальных участников.

В качестве другого примера я создал проект Google Code несколько лет назад (назовем его «oldproj»). Когда я создавал проект, я знал, что собираюсь разместить его в Google Code, поэтому я использовал groupIdимя пакета и com.googlecode.oldproj, которое противоположно имени домена по умолчанию, которое Google Code предоставляет каждому новому проекту. Это оказалось не очень хорошей идеей; Примерно через год я переместил код в другое хранилище и мне пришлось переименовать эти идентификаторы (ну, у меня не былоно ...). В то время у меня не было никаких доменных имен, и в итоге я купил доменное имя «oldproj.com» и использовал его. Мне понравилось это, потому что это дало проекту собственную идентичность, и я не везде отмечал свое имя в коде. Я мог бы так же легко зарегистрировать доменное имя «jessewebb.ca» и использовать «ca.jessewebb.oldproj» в качестве имени пакета, но я этого не сделал, потому что тогда у меня были те же проблемы.

Итак, мой вопрос ...

Как я могу избежать использования моих собственных (доменных) имен при создании проектов с открытым исходным кодом при сохранении уникальности пакетов / пространств имен?

По мере того, как проекты набирают обороты, имеет смысл регистрировать доменные имена, но это кажется глупостью и пустой тратой денег, чтобы сделать это раньше. Я понимаю, что на самом деле мне не нужно владеть доменным именем, чтобы использовать его в коде, но это неправильно и может привести к тому, что скваттер вырвет его из-под вас. Что другие люди делают с этой дилеммой? Существуют ли примеры популярных (широко используемых, крупных сообществ и т. Д.) Проектов с открытым исходным кодом, которые содержат идентификационные данные оригинального разработчика как часть его собственных идентификаторов?


2
Ого, довольно длинный, но все же хороший вопрос!
Марсель

1
Использовать UUID в ваших пакетах / пространствах имен? ;-)
Jeroen

Ответы:


5

В своих проектах я даю им имя, но не обязательно домен. Таким образом, мои имена пакетов (и пространства имен) обычно просто "имя_проекта.libraryname", независимо от того, где размещен код.

Я привык к .NET, где это происходит достаточно свободно.


Я думаю, что это хорошее решение, когда у меня нет или (сразу) требуется домен, зарегистрированный для проекта. Я мог бы даже сделать это, когда у меня есть домен. Это даже помогло бы убедиться, что я использую уникальные имена проектов, что никогда не является плохой вещью. Я, вероятно, скоро приму этот ответ, если только не придут лучшие. Благодарность!
Джесси Уэбб

Да, программисты .NET делают это, но это не очень хорошая идея. Если название проекта - выдуманное слово, оно может сработать, но я бы хотел, чтобы у меня был доллар за каждый проект «Загрузчик» или «Браузер», который я видел.
Росс Паттерсон

1
Я начал использовать эту стратегию для всех своих проектов. Я придумываю уникальное имя для проектов, почти кодовое имя (простите за каламбур), и использую его для своих пакетов / пространств имен. Это избавляет меня от необходимости беспокоиться о доменных именах, по крайней мере, пока не наступит время, когда я захочу.
Джесси Уэбб

2

Я не могу вспомнить, где я видел это, но я видел, что он предложил использовать такую ​​структуру:

YourIdentifier.YourProduct.YourComponent

YourIdentifier может быть чем-то вроде принадлежащего вам домена, вашего (довольно уникального) интернет-псевдонима и т. Д. И т. Д. Имя компонента не используется для «основного» кода вашего продукта. Например, у меня есть небольшая инфраструктура MVC с именем BarelyMVC, поэтому у меня есть такие пространства имен:

Earlz.BarelyMVC
Earlz.BarelyMVC.Authentication
Earlz.BarelyMVC.Caching

и т. д. и т. д. Ваш сетевой псевдоним в большинстве случаев достаточно уникален, чтобы избежать конфликтов между другими разработчиками

Если вы боитесь использовать собственный онлайн-псевдоним, создайте «ярлык» для себя. Он не должен быть официально зарегистрирован как компания или что-либо (или даже домен). Например, популярная Json.Netбиблиотека использует пространство имен Newtonsoft.Json. Это очевидно основано на фамилии авторов "ньютон", но я не думаю, что кто-то действительно заботится об этом. И если у вас есть официально зарегистрированная компания, то вы, конечно, можете это использовать. Например, большинство общедоступных API, созданных моей компанией, имеют пространства имен, начинающиеся с PreEmptiveSolutionsназвания компании.


1
Очень часто встречается в мире .NET, где вещь обратного доменного имени никогда не завоевывала популярность. И пока «YourIdentifier» серьезно уникален, он работает. Но даже Newtonsoft уникальна лишь случайно - Джеймс Ньютон-Кинг фактически не управляет такой компанией, и его торговая марка существовала бы только в Новой Зеландии, если бы он это сделал.
Росс Паттерсон

1

Нет правила, что имена пакетов Java или пространства имен .NET являются именами доменов. Нет даже требования, чтобы они были уникальными, хотя это, безусловно, хорошая идея. Я действительно думаю, что вы были правы в использовании com.googlecode.oldproj, и на вашем месте я бы не переключился, com.oldprojесли бы не попытался получить рекламу нового доменного имени.


Я понимаю, что нет правила, по которому вы должны использовать доменные имена, но я думаю, что это очень распространенная практика, по крайней мере, в мире Java и .NET, просто потому, что она помогает обеспечить уникальность. Кроме того, вы сказали, что думаете, что я был прав com.googlecode.oldproj, почему вы думаете, что это хорошая идея? Оглядываясь назад, я думал, что глупо привязывать код к хостинг-провайдеру.
Джесси Уэбб

1
Дело не в том, что это связывает вас с каким-то хостинг-провайдером, а в том, что это условно-уникальный идентификатор, свойственный этому проекту. Который все "com.jesseweb.oldproj", технически. Так как вы не хотели, чтобы ваше имя было прикреплено к нему, это было хорошее решение. Пакеты Java и пространства имен .NET не должны быть указателями, направляющими вас на сайт загрузки и т. Д. , А просто идентификатором, который по соглашению является уникальным.
Росс Паттерсон
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.