2010-02-06 47 views
5

Tôi đang tạo một cặp máy chủ khách hàng VoIP trong java bằng cách sử dụng IDE netbeans. Tôi muốn sử dụng chỉ có 1 dự án nhưng tôi không quen với cách netbeans sẽ tạo ra các tập tin Jar. Tôi cần một nếu điều này là có thể và nếu có, làm thế nào để thiết lập nó.Tạo các lọ với nhiều lớp chính trong netbeans

Trả lời

3

Tôi tin rằng mục đích của 'lớp chính' có nghĩa là tệp kê khai JAR cuối cùng, sẽ gắn nhãn một lớp là 'lớp để chạy': để người dùng cuối chỉ có thể nhấp đúp vào nó * hoặc chạy một dòng lệnh đơn giản như:

java -jar <jar>

thay vì phải xác định gói/tên cả lớp như:

java -cp <jar> com.yourcom.package.classname 

Nếu tôi đúng, sau đó tôi không thấy làm thế nào nó sẽ có ý nghĩa để có nhiều hơn một lớp học chính? Có lẽ tôi hiểu sai câu hỏi của bạn - hoặc có mục đích khác cho lớp 'chính'? Nếu bạn có nghĩa là có hai lớp có phương thức 'chính' - thì điều này là tốt - người dùng cuối có thể khởi chạy bất kỳ lớp nào theo tên - và miễn là chúng có sig phương thức chính chuẩn, ví dụ:

nó chỉ hoạt động.

* (trên Windows ít nhất, và cho dù đó cũng làm việc phụ thuộc vào JRE họ có và những thứ có thể khác)

+0

Lý do cho 2 lớp chính là do máy chủ và ứng dụng khách.Tôi muốn có một tệp jar được tạo cho mỗi lớp chính trong khi chứa trong một dự án. Có lẽ điều này đã làm rõ câu hỏi của tôi. – Zach

+0

Vì vậy, bạn muốn có một dự án và hai lọ tôi nghĩ: vì vậy tôi nghĩ trong trường hợp đó, bạn có thể cần phải thực hiện một dự án dạng tự do: để bạn có thể tùy chỉnh các kịch bản lệnh (ant) để làm điều này. Tôi thường làm việc trên hai dự án trong kịch bản đó: trừ khi bạn thực sự cần chia sẻ nhiều mã giữa hai dự án: sau đó xem xét tạo dự án 'thư viện' thứ ba - sau đó bạn có thể thêm dự án đó làm thư viện phụ thuộc hai. [Tôi hy vọng điều đó có ý nghĩa!] – monojohnny

+0

Ok, tôi nghĩ tôi đã hiểu ngay bây giờ. – Zach

4

Tôi không biết làm thế nào Netbeans làm việc, nhưng nó phải là không có vấn đề đặt nhiều hơn một lớp chính trong một JAR. Trên thực tế, một lớp chính chỉ là một lớp có một phương thức chính và một JAR là một tập hợp các tệp lớp.
Hạn chế duy nhất là chỉ có thể có một lớp học sẽ được bắt đầu bằng cách nhấp đúp vào JAR.

Để bắt đầu mỗi lớp, bạn không được sử dụng tùy chọn -jar, nhưng cung cấp tên lớp đầy đủ.
Ví dụ, nếu bạn có một khách hàng và một lớp Server trong JAR của bạn, khách hàng đang bắt đầu bởi
java -cp file.jar Client
và Server bằng
java -cp file.jar Server.

Tùy chọn là tạo một lớp thứ ba khởi động được sử dụng để khởi động máy chủ hoặc máy khách dựa trên đối số dòng lệnh (hoặc cửa sổ GUI).

8

JAR File Specification chỉ cho phép Main-Class thuộc tính cho mỗi JAR, nhưng JAR có thể có số lượng tùy ý các lớp khai báo phương thức main(). Bất kỳ lớp học nào như vậy sẽ được đưa vào thuộc tính BuildPackaging của dự án, trừ khi được loại trừ một cách cụ thể.

Là một ví dụ cụ thể, H2 Database bao gồm các lớp với main():

 
org.h2.jdbcx.JdbcConnectionPool 
org.h2.tools.Backup 
org.h2.tools.ChangeFileEncryption 
org.h2.tools.Console 
org.h2.tools.ConvertTraceFile 
org.h2.tools.ConvertTraceFile 
org.h2.tools.CreateCluster 
org.h2.tools.DeleteDbFiles 
org.h2.tools.Recover 
org.h2.tools.Restore 
org.h2.tools.RunScript 
org.h2.tools.Script 
org.h2.tools.Server 
org.h2.tools.Shell 

Phụ Lục: Rõ ràng, dự án rác-ngăn kéo của tôi cần bảo trì.

 
$ find scratch/src -name \*java | xargs -J % egrep 'main[ \t]*\(Str' % | wc -l 
    109 
+0

+1 câu trả lời chính xác nhất – stacker

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