Bạn sử dụng quy ước đặt tên gói nào cho các dự án cá nhân / sở thích trong Java?


142

Tôi đã quen với quy ước đặt tên gói Java tiêu chuẩn là sử dụng một tên miền để tạo một tên gói duy nhất (nghĩa là gói com.stackoverflow.widgets). Tuy nhiên, tôi chưa bao giờ thấy bất kỳ đề xuất nào về cách chọn tên gói cho các dự án cá nhân. Tôi giả sử bởi vì điều này là bởi vì đây thực sự là một vấn đề của sở thích cá nhân.

Vì vậy, làm thế nào để bạn chọn tên gói cho các dự án cá nhân sẽ không bao giờ được đưa vào sản xuất (bạn có thể đang thử nghiệm một khung mới trong thời gian rảnh). Giả sử bạn không có một trang web cá nhân có tên miền bạn có thể sử dụng để tạo cấu trúc gói của mình, bạn sẽ làm gì (hoặc sẽ)? Bạn có sẵn một hệ thống logic để tạo tên gói mới cho các dự án sở thích hay bạn chỉ sử dụng các tên gói đơn giản như thế mypackagenào?

Vì tôi chỉ tò mò muốn xem suy nghĩ của mọi người về vấn đề này là gì, tôi đã biến đây thành một wiki cộng đồng.

Đối với cá nhân tôi, tôi chưa bao giờ suy nghĩ nhiều, nhưng tôi muốn chơi xung quanh với Wicket tối nay và tôi nhận ra rằng tôi không có ý tưởng rõ ràng về cách tôi muốn tổ chức các dự án sở thích của mình. Một quy ước đặt tên gói riêng biệt, riêng biệt cho các dự án sở thích (ít nhất là trong suy nghĩ của tôi) sẽ là một cách tốt để giữ cho các mã cá nhân và liên quan đến công việc tách biệt rõ ràng với nhau.

Tôi đã nghĩ đến một quy ước đặt tên phân cấp đơn giản, để giữ nguồn cho các dự án cá nhân của tôi trong một thư mục gốc duy nhất:

  • Sử dụng myprojectslàm thư mục gốc
  • Nối tên dự án
  • Thêm bất kỳ tên gói phụ bổ sung

Vì vậy, dự án Wicket của tôi sẽ nằm trong gói myprojects.learningwicketvà các bài kiểm tra đơn vị sẽ nằm trong gói myprojects.learningwicket.tests(ví dụ).


1
Thông thường, hãy tạo cho mình một tên miền cá nhân (Firstname-lastname.net) và sử dụng nó làm tên gói. Mục đích của gói là duy nhất trên toàn cầu, vì vậy các sản phẩm của tôi không thực sự cắt giảm.
Vladimir Dyuzhev

5
Sử dụng tên miền .onion cũng là một tùy chọn (như onion.duskgytldkxiuqc6.packagename). Miễn là khóa riêng vẫn còn bí mật, bạn sẽ kiểm soát tên miền. Vì vậy, nó miễn phí để đăng ký (tạo) và nó là vĩnh viễn (không giống như các tên miền thông thường). Nó phù hợp với chữ cái của quy ước Java và nó xác định bạn là duy nhất.
sastanin

14
Bạn luôn có thể tạo tài khoản GitHub và sử dụng io.github.username. *.
Bardi Harborow

2
@BardiHarborow cảm ơn, tôi đã sử dụng đề xuất của bạn.
Nick Volynkin

3
@GabrielBB, GitHub Pages cho phép bạn lưu trữ các trang web HTML và Jekyll tại yourusername.github.io và do đó, các tên miền phụ của github.io được "đảm bảo" tương ứng với người dùng GitHub hơn là tên miền phụ của github.com (có thể được sử dụng cho nội bộ Dự án GitHub bất cứ lúc nào).
Bardi Harborow

Câu trả lời:


48

Nếu bạn chỉ đang thực hiện các dự án cá nhân mà không ai khác sẽ sử dụng mã, thì bạn có thể tạo một tên gói mà bạn thích. Mặc dù vậy, đừng tạo ra thứ gì đó bắt đầu bằng com.hoặc net.tên miền cấp cao khác, bởi vì điều đó có nghĩa là bạn sở hữu tên miền (nghĩa là sử dụng com.johnlàm tên gói của bạn chỉ vì tên của bạn là John không phải là ý hay) .

Nếu bạn định cung cấp mã cho bất kỳ ai khác, bạn nên sử dụng tên gói duy nhất trên toàn cầu, theo quy ước Java có nghĩa là bạn nên đăng ký và sử dụng tên miền.


1
Vì vậy, nếu tôi muốn giải quyết tên gói như com.xyztên gói này nên được đăng ký ở đâu đó ?? PS xyzlà khách hàng của tôi.
Prasad

9
Tôi tự hỏi nếu tôi có thể sử dụng id github của tôi cho tên miền đó và github? Ví dụ com.github.mygithubid.myproject?
Kirill G.

2
@KirillG. Tôi sẽ khuyên bạn nên chống lại nó, vì ID GitHub có thể được thay đổi bất cứ lúc nào, bất kỳ số lần nào. Cấp, bất kỳ tên miền có thể thay đổi, nhưng không dễ dàng hoặc thường xuyên (dù sao không phải bình thường). Mặc dù tôi đoán nó ổn cho các dự án sở thích.
sara

26

Tôi chỉ sử dụng tên viết tắt của mình: fg.nameofproject.etc

Nó làm giảm việc gõ. Nó có thể được thêm tiền tố bất cứ lúc nào với sf.net hoặc com. hoặc tổ chức hoặc com.google ..

Vì dự án là đối xử cá nhân, nó đặc biệt giống như chiếc áo quà được cá nhân hóa mới của bạn - nó sẽ cảm thấy tốt.


42
bond.james.007
Nhấp vào Upvote

19
@click theo hướng dẫn sẽ là bond.james._007- không có vòng tương tự với nó ...: - {
corsiKa

20
pmurray_at_bigpond_dot_com.project.package

2
+1. Tài giỏi. Điều này giúp bạn có một tên gói duy nhất và xác định tất cả các tác giả cùng một lúc.
Mike Spross

19

<sarcasm>Bah Bất kỳ lập trình viên tự tôn trọng sẽ có tên miền riêng của mình. Đây rõ ràng là một câu hỏi mẹo. Mọi người đều có tên miền riêng của họ! </sarcasm>:-)

Ok, trong tất cả sự nghiêm túc, mua một tên miền tùy chỉnh có lẽ là lựa chọn dễ dàng nhất. Với khoảng 10 đô la một năm, bạn có thể tìm thấy các nhà cung cấp có uy tín để lưu trữ tên miền và chuyển tiếp email.


18
Thật kỳ lạ, điều này cũng sẽ làm tăng sự tự tin của bạn.
jamesh

26
Câu trả lời tốt, nhưng một lập trình viên mới bắt đầu có thể không muốn mua một trang web chỉ để theo dõi một số trang web hướng dẫn hoặc video về cách tạo GUI bằng nút đóng.
Joool Kuijpers

16

Tôi lưu trữ hầu hết các dự án sở thích của mình trong Google Code, vì vậy tôi chỉ sử dụng trang web của dự án làm tên gói : com.googlecode.donkirkby.someproject.


8
Làm thế nào mù chúng ta có thể đã không nhìn thấy sự điên rồ của hành động của chúng tôi?!
Joey Sabey

1
Bạn nhớ Google Code, @Joey? Tôi hầu như đã sử dụng GitHub trong vài năm qua, vì vậy tôi chỉ phải chuyển một vài dự án cũ của mình khỏi Google Code trước khi chúng ngừng hoạt động.
Don Kirkby

Vì vậy, bạn đã đổi tên các gói, giữ tên googlecode, hoặc ...?
phục vụ

1
Tôi đã không sử dụng bất kỳ mã cũ nào kể từ khi tôi chuyển nó, @ serv-inc. Hoặc là tùy chọn sẽ làm việc.
Don Kirkby

3

tên tôi là anjan

thông thường, tôi sử dụng com.anjan

Tôi có một công ty tưởng tượng của riêng mình - đôi khi tôi sử dụng nó

truyền thống với sourceforge (như ngủ đông và các gói khác được hiển thị) là net.sf. *

vì vậy, tùy thuộc vào tâm trạng của bạn, bạn có thể đi với điều đó.


13
Trừ khi bạn cũng sở hữu anjan.com Tôi nghĩ bạn đã sai lầm khủng khiếp khi làm như vậy.
Fredrik

7
@Fredrick may mắn thay, có vẻ như anjan.com sẽ không sớm phát hành bất kỳ thư viện nào.
corsiKa

1
@corsiKa: bạn nói đúng, miễn là tôi không tiết lộ bất cứ điều gì, tôi ổn. :-)
anjanb

3
@anjanb Vâng, tôi đã truy cập trang web của họ. Họ làm thức ăn cho thú cưng. Tôi không phải là chuyên gia, nhưng hầu hết các công ty thức ăn cho thú cưng không phát hành nhiều thư viện phần mềm =)
corsiKa

3

Tôi nghĩ rằng bạn đã làm nó ra. Sự cám dỗ để tránh ở đây là không bận tâm với một tên gói nào cả. Thật dễ dàng để lưu một vài tổ hợp phím vì "Tôi chỉ đang viết một số mã kiểm tra." Nhưng sau đó, mã trở nên tốt và hữu ích và lớn, và sau đó bạn nhận ra rằng bạn có một khởi đầu vững chắc cho những gì có thể là một thư viện hoặc ứng dụng tồn tại lâu dài. Nó có thể không phải là một thư viện hoặc một ứng dụng đã rời khỏi mạng gia đình của bạn, nhưng vấn đề là, bạn đã không nghĩ trước. Đó là bóng ma Đan Mạch của khoa học máy tính - luôn luôn nghĩ về phía trước, nếu chỉ một chút thôi.

Quy ước đặt tên tôi sử dụng cho mã sở thích của mình rất giống với quy tắc của bạn. Tôi có một thư mục cấp cao nhất có tên là "futura" (lý do dài, nhàm chán tại sao tên đó xuất hiện) mà tất cả mã của tôi bị treo. Tôi thử và sắp xếp mã của mình vào các thư viện gói, ngay cả khi đó có thể là một lớp hoặc gói mà tôi không bao giờ sử dụng cho dự án khác. Tôi đặt tất cả các ứng dụng (nghĩa là, bất cứ thứ gì có khoảng trống chính (Chuỗi [] args) trong lớp) trong thư mục futura.app. *. Tôi cũng cố gắng bắt chước các tên gói thư viện Java tiêu chuẩn cho mã riêng của mình, mặc dù trong một vài trường hợp tôi đã phá vỡ quy ước vì sở thích của riêng tôi (ví dụ như Futura.inet cho Internet, không chỉ là socket, code và futura.collections cho không -Sử dụng công cụ.) Để diễn giải David Mamet: Luôn luôn khái quát. Luôn luôn chung chung!

Từ sự quan tâm mà bạn đã sử dụng để đăng câu hỏi, tôi nghi ngờ bạn cũng đồng ý với quan điểm cuối cùng của tôi: Bạn không phải coi việc hack sở thích là một dự án cấp doanh nghiệp, nhưng nếu bạn mang một số kỷ luật đó vào trò chơi gia đình, sở thích là tất cả các phần thưởng nhiều hơn.


2

Tôi sử dụng URL OpenID của mình và sau đó tôi thêm tên dự án của mình. ví dụ, com.myopenid.cd1.twitterlà gói gốc của ứng dụng khách Twitter tôi đang phát triển.


Tôi thích điều này, nhưng sau đó tôi nhận ra nó không còn tồn tại. :( janrain.com/myopenid-service-ends "Kể từ ngày 1 tháng 2 năm 2014, dịch vụ MyOpenID đã bị tắt."
vào


1

Tôi chỉ sử dụng tên của mình: surname.initials.xxx, như một sự kết hợp tốt đẹp giữa sự ngắn gọn và tránh va chạm. Tôi hình dung rằng sẽ cung cấp một không gian tên xung đột miễn phí hợp lý nếu tôi chọn xuất bản công khai mã. Tôi cũng có một chương trình nhỏ mà tôi đã viết có thể đóng gói lại toàn bộ cây thư mục vì vậy tôi nghĩ rằng tôi có cần phải đóng gói lại để xuất bản hay không ... vì vậy tôi đã không ngủ quá nhiều.

Sau surname.initials.xxx, tôi sử dụng một trong hai ứng dụng cho các gói ứng dụng, lib cho các gói thư viện và tst cho những thứ tôi hoàn toàn thử nghiệm.


1

bạn nghĩ gì về lastname.firstname.project ??? như luz.marlon.project?


16
Điều đó có thể phù hợp với bạn, nhưng John Smith và Bob Jones có thể gặp phải xung đột khi họ muốn phát hành mã của mình một ngày nào đó.
Xuất hóa đơn cho thằn lằn

0

Tôi nghĩ về việc hỏi cùng một câu hỏi. Cho đến nay tôi đã sử dụng tiền tố com.tehvan, mặc dù tôi không thực sự có một công ty.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.