Estoy creando un par de servidores cliente VoIP en Java usando el IDE netbeans. Me gustaría usar solo 1 proyecto pero no estoy familiarizado con cómo netbeans crearía el archivo Jar. Necesito una respuesta si esto es posible y, de ser así, cómo configurarlo.Creación de jarras con múltiples clases principales en netbeans
Respuesta
Creo que el propósito de una 'clase principal' significa que el eventual archivo de manifiesto JAR 'etiquetará una clase como' la clase a ejecutar ': para que el usuario final simplemente haga doble clic * o ejecutar una línea de comandos simplificada como:
java -jar <jar>
en lugar de tener que especificar el paquete completo nombre/clase como:
java -cp <jar> com.yourcom.package.classname
Si estoy en lo cierto, entonces yo no veo cómo lo haría ¿Tiene sentido tener más de una clase principal? Tal vez malinterpreté su pregunta, ¿o hay otro propósito para la clase 'principal'?
Si quiere decir tener dos clases que tienen un método 'principal' - entonces está bien - el usuario final puede iniciar cualquiera de las clases por nombre - y siempre que tengan el método principal estándar sig, por ejemplo:
debería funcionar.
* (en Windows, al menos, y si eso funciona también depende de qué JRE que tienen y probablemente otras cosas)
No sé cómo el trabajo Netbeans, pero debería haber ningún problema poniendo más de una clase principal en un JAR. En realidad, una clase principal es solo una clase que tiene un método principal y una JAR es una colección de archivos de clase.
La única restricción es que solo puede haber una clase que se iniciará haciendo doble clic en el JAR.
Para iniciar cada clase, no debe usar la opción -jar, pero proporcione el nombre de clase completo.
Por ejemplo, si usted tiene un cliente y un servidor en su clase JAR, el cliente es iniciado por
java -cp file.jar Client
y el servidor de
java -cp file.jar Server
.
Una opción es crear un tercer starter clase utilizada para iniciar el servidor o el cliente en función de un argumento de línea de comando (o una ventana de GUI).
El JAR File Specification permite solo un atributo Main-Class
por JAR, pero el JAR puede tener un número arbitrario de clases que declaran un método main()
. Dicha clase se incluirá en la propiedad Build
Packaging
del proyecto, a menos que se excluya específicamente.
Como ejemplo concreto, H2 Database incluye estas clases con 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
Adición: Al parecer, mi proyecto de basura cajón necesita mantenimiento.
$ find scratch/src -name \*java | xargs -J % egrep 'main[ \t]*\(Str' % | wc -l 109
+1 respuesta más precisa – stacker
- 1. leiningen con múltiples clases principales
- 2. Creación de diagramas de clases UML en NetBeans 7.1.1
- 3. clases creación dinámica con Java
- 4. Creación dinámica de clases en SQLAlchemy
- 5. Datos principales: UITableView con múltiples NSFetchedResultControllers
- 6. Creación de clases con propiedades privadas
- 7. Posible ejecutar múltiples bucles principales?
- 8. ¿Múltiples cursores para Netbeans?
- 9. Recurso anidado con recursos principales múltiples en Rails 3
- 10. Autocompletar para objetos PHP con clases en PDT/Netbeans?
- 11. múltiples "líneas principales" en módulos OCaml vinculados
- 12. Múltiples clases en SVG
- 13. Agregar clases predeterminadas del paquete en NetBeans
- 14. Cómo trabajar con columpios con múltiples clases
- 15. de prueba (no clases) con NetBeans y PHPUnit
- 16. Creación dinámica de clases - Python
- 17. Prueba de clases múltiples con PHPUnit
- 18. Creación dinámica de clases en Objective-C
- 19. Datos principales: ¿una relación inversa con entidades múltiples?
- 20. Colmena: creación de tablas con varios archivos con múltiples directorios
- 21. Creación de objetivos múltiples en Qt/Qmake
- 22. cómo usar log4j con múltiples clases?
- 23. ¿Cómo encontrar qué jarras y en qué orden las carga un cargador de clases?
- 24. Tomcat: implementación en caliente de nuevas jarras
- 25. Java Generics comodines Con múltiples clases
- 26. Creación de clases de Core Foundation
- 27. Comportamiento del cargador de clases en Tomcat con múltiples aplicaciones
- 28. Coincide con múltiples clases de casos en scala
- 29. inversa relación con múltiples clases Herencia de Django en
- 30. ¿Múltiples clases abstractas derivadas?
El motivo de 2 clases principales se debe al servidor y al cliente.Me gustaría tener un archivo jar creado para cada clase principal mientras esté contenido en un proyecto. Tal vez esto aclaró mi pregunta. – Zach
Así que quieres un proyecto y dos jarras, creo: entonces creo que en ese caso probablemente necesites un 'proyecto de forma libre': para que puedas personalizar los guiones de compilación (ant) para hacerlo. Normalmente solo trabajo en dos proyectos en ese escenario: a menos que realmente necesite compartir mucho código entre los dos proyectos: entonces considere crear un tercer proyecto de 'biblioteca'; luego puede agregar eso como una biblioteca dependiente a la otra dos. [Espero que tenga sentido!] – monojohnny
Ok, creo que entiendo en este momento. – Zach