2010-02-06 10 views
5

Ich erstelle ein VoIP-Client-Server-Paar in Java mit der Netbeans-IDE. Ich würde gerne nur ein Projekt verwenden, aber ich bin nicht vertraut damit, wie Netbeans die Jar-Datei erstellen würde. Ich brauche ein, wenn das möglich ist und wenn ja, wie man es einrichtet.Erstellen von Gläsern mit mehreren Hauptklassen in Netbeans

Antwort

3

Ich glaube, dass der Zweck einer 'Hauptklasse' bedeutet, dass die eventuelle JAR 'Manifestdatei eine Klasse als die' Klasse zum Ausführen 'bezeichnet: damit der Endbenutzer sie einfach * oder doppelklicken kann führe eine vereinfachte Kommandozeilen wie:

java -jar <jar>

anstatt die gesamten Paket/Klassennamen angeben:

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

Wenn ich Recht habe, dann sehe ich nicht, wie es wäre Sinn machen, mehr als eine Hauptklasse zu haben? Vielleicht habe ich Ihre Frage falsch verstanden - oder gibt es einen anderen Zweck für die 'Hauptklasse'?

Wenn Sie zwei Klassen haben, die eine "Haupt" -Methode haben - dann ist das in Ordnung - der Endbenutzer kann jede der Klassen mit Namen starten - und solange sie die Standard-Hauptmethode sig haben, zum Beispiel:

sollte es einfach funktionieren.

* (unter Windows zumindest, und ob das funktioniert, hängt auch von dem JRE sie haben und wahrscheinlich noch andere Dinge)

+0

Der Grund für 2 Hauptklassen ist wegen des Servers und des Klienten.Ich möchte eine Jar-Datei für jede Hauptklasse erstellt, während in einem Projekt enthalten. Vielleicht hat das meine Frage geklärt. – Zach

+0

Sie wollen also ein Projekt und zwei Jars, denke ich: also denke ich, dass Sie in diesem Fall wahrscheinlich ein "Freiform-Projekt" wählen müssen: Sie können also die Build- (Ameisen-) Skripte anpassen, um dies zu tun. Ich arbeite normalerweise nur an zwei Projekten in diesem Szenario: es sei denn, Sie müssen wirklich viel Code zwischen den zwei Projekten teilen: dann erwägen Sie, ein drittes 'Bibliothek' Projekt zu erstellen - Sie können das dann als abhängige Bibliothek hinzufügen zwei. [Ich hoffe, das ergibt Sinn!] – monojohnny

+0

Ok, ich glaube, ich verstehe jetzt. – Zach

4

Ich weiß nicht, wie Netbeans Arbeit, aber es sollte kein Problem setzen mehr als eine sein Hauptklasse in einem JAR. Tatsächlich ist eine Hauptklasse nur eine Klasse mit einer Hauptmethode und eine JAR ist eine Sammlung von Klassendateien.
Die einzige Einschränkung ist, dass es nur eine Klasse geben kann, die mit einem Doppelklick auf die JAR gestartet wird.

Um jede Klasse zu starten, müssen Sie nicht die Option -jar verwenden, sondern den vollständigen Klassennamen angeben.
Zum Beispiel, wenn Sie einen Client und eine Server-Klasse im JAR haben, wird der Kunde durch
java -cp file.jar Client
und den Server von
java -cp file.jar Server gestartet.

Eine Option besteht darin, eine dritte Starter-Klasse zu erstellen, mit der entweder der Server oder der Client basierend auf einem Befehlszeilenargument (oder einem GUI-Fenster) gestartet wird.

8

Die JAR File Specification erlaubt nur ein Main-Class Attribut pro JAR, aber die JAR kann eine beliebige Anzahl von Klassen haben, die eine main() Methode deklarieren. Eine solche Klasse wird in die Eigenschaft BuildPackaging des Projekts aufgenommen, sofern nicht ausdrücklich ausgeschlossen.

Als konkretes Beispiel enthält H2 Database diese Klassen mit 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 

Nachtrag: Anscheinend meine Junk-Schublade Projekt gewartet werden muss.

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

+1 genaueste Antwort – stacker

Verwandte Themen