2013-04-12 39 views
5

Có một vài câu hỏi về SO loại này nhấn, nhưng tôi hoàn toàn mới để phát triển Java và tôi không biết cách chính xác để tiếp cận này.Trong Java, tôi có nên tạo một Gói, Thư mục hoặc Thư mục Nguồn mới không?

Tôi có giải pháp C#, chứa hai dự án (ứng dụng của tôi và dự án thử nghiệm đơn vị) và trong ứng dụng, hầu hết mọi thứ được đưa vào thư mục ví dụ. Giao diện, ngoại lệ, v.v.

Tôi đang cố gắng tạo lại điều này trong Java/Eclipse, nhưng tôi không biết làm thế nào. Tôi đã kết thúc với rất nhiều gói, mà âm thanh thực sự xấu. Tôi cũng đã thử thêm một thư mục nguồn nhưng cuối cùng đã được bên ngoài của gói.

Có ai có thể chỉ cho tôi đúng hướng không?

Cụ thể, tôi nên sử dụng cái nào trong số đó để đại diện cho dự án thử nghiệm đơn vị/tập hợp các bài kiểm tra đơn vị và các thư mục con tồn tại chỉ để tổ chức nội dung.

Chỉnh sửa: Nó cũng cho biết việc sử dụng gói mặc định không được thông báo. Tôi nên làm gì đây?

Chỉnh sửa 2: Dưới đây là hình thức của nó. Điều này có vẻ mơ hồ đúng không? Giải pháp C# ban đầu của tôi ở bên phải.

My Layout

+0

Không có gì sai khi có nhiều gói; nếu những gói đó là hợp lý. –

+0

http://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html ví dụ – user1516873

Trả lời

2

Trong một dự án nhật thực java điển hình, bạn sẽ có một hoặc nhiều thư mục nguồn (ví dụ một cho mã ứng dụng, một cho các bài kiểm tra đơn vị của bạn).

Mỗi thư mục chứa cây gói, thường bắt đầu bằng gói cơ sở của bạn, ví dụ: com.mycompany.myapp.

Để tránh xung đột tên, tên gói thường bắt đầu bằng tên miền của thực thể là tác giả của mã, bắt đầu bằng tên miền cấp cao nhất và ngược lại (tổng quát hơn để cụ thể hơn). Bằng cách đó, mỗi tên lớp đủ điều kiện là duy nhất. Ví dụ: nếu google tạo một lớp có tên là List, nó sẽ được gọi là com.google.List và sẽ không xung đột với giao diện hiện tại java.util.List.

Bạn có thể có một số lượng không giới hạn các gói bên trong gói cơ sở này, ví dụ:

com.mycompany.myapp.persistence 
com.mycompany.myapp.domain 
com.mycompany.myapp.services 
com.mycompany.myapp.web 

Tất cả đều phụ thuộc vào dự án của bạn và cách bạn muốn tổ chức mã của bạn và lớp học của bạn.

Ở cấp độ hợp lý, các gói được đặt tên bằng dấu chấm làm dấu phân cách. Chúng chứa các lớp java.

Ở mức vật lý trên đĩa, mỗi gói là một thư mục. Các lớp java được chứa trong các tệp .java (thường xuyên nhất một lớp cho mỗi tệp).

Trong Eclipse, "thư mục nguồn" là một thư mục bên trong dự án của bạn được Eclipse biết chứa các tệp nguồn java. Nó sẽ được biên dịch bao gồm trong đầu ra (ví dụ như tệp JAR) khi bạn xây dựng dự án của mình.

Trong Eclipse, bạn thường xem chúng ở cấp độ hợp lý, hiển thị các gói. Khi bạn yêu cầu Eclipse tạo "một gói mới", nó sẽ tạo thư mục cho bạn. Ví dụ: nếu bạn yêu cầu tạo gói com.mycompany.myproject, nó sẽ tự động tạo thư mục com chứa thư mục mycompany chứa thư mục myproject.

+0

Vì vậy, tôi nên làm những gì tôi đã làm ở trên, nhưng làm tổ tất cả các gói của tôi trong một gói ban đầu? – NibblyPig

+0

Vâng, về cơ bản đó. Các lớp trong gói "gói mặc định" hiện tại của bạn sẽ trực tiếp trong gói cơ sở dự án của bạn và các gói khác sẽ được lồng vào bên trong nó. Hãy chắc chắn chọn một gói sẽ xác định dự án của bạn, không chỉ là thực thể của bạn. Vì vậy, nếu bạn tạo các dự án khác sau đó họ có một gói cơ sở khác nhau. –

+0

Như đã đề cập khác, nó cũng được khuyến khích trong nhiều trường hợp sử dụng Maven như một công cụ xây dựng. Maven đi kèm với cấu trúc dự án mặc định cho các loại dự án differetn (chúng được gọi là archetypes) tách riêng nguồn chính, nguồn kiểm tra, tài nguyên và vv. Chúng thường rất hợp lý, và bạn nhận được nhiều lợi ích khác, lớn nhất trong IMHO là quản lý phụ thuộc (JAR). –

1

Trong java cấu trúc cây nguồn phải phù hợp với cấu trúc gói

nên foo.bar gói phải được đặt ra trong

src/foo/bar

gói Cũng mặc định có thể không được thông báo - nhưng bạn vẫn có thể sử dụng nó - tốt hơn để đặt mọi thứ trong một gói mặc dù

+1

Thông thường '/ src/foo/bar' có nghĩa là các nguồn nằm trong'/src' và các lớp của gói 'foo.bar' nằm trong thư mục'/src/foo/bar' –

+1

Chỉ cần một lưu ý, nếu bạn đã quen thuộc với C#, bạn có thể nghĩ về các gói như các không gian tên trong C#. Khái niệm này khá giống nhau. – jnovacho

+0

@Mark Rotteveel - cũng phát hiện - chỉnh sửa – gheese

0

Trong java projec khác nhau Cơ cấu phát triển được lưu thông theo loại dự án. Vì vậy, khi bạn chưa quen với java và Eclipse, nên tốt hơn là cài đặt plugin maven và tạo dự án maven và chọn một kiểu mẫu theo loại dự án của bạn như một độc lập hoặc dựa trên web. Plugin maven sẽ tạo cấu trúc dự án bao gồm gói, kiểm tra thư mục nguồn gói vv Bạn có thể tìm hiểu thêm về cấu trúc dự án từ this

0

Sử dụng gói mặc định có thể tạo xung đột vùng tên. Hãy tưởng tượng bạn đang tạo một thư viện chứa một lớp MyClass. Ai đó sử dụng thư viện của bạn trong dự án của mình và cũng có một lớp MyClass trong gói mặc định của mình. Trình biên dịch nên làm gì? Gói trong Java thực sự là một không gian tên xác định đầy đủ dự án của bạn. Vì vậy, điều quan trọng là không sử dụng gói mặc định trong các dự án thế giới thực.

Các vấn đề liên quan