Создание банок с несколькими основными классами в NetBeans - PullRequest
5 голосов
/ 06 февраля 2010

Я создаю пару клиент-сервер VoIP в Java, используя IDE NetBeans. Я хотел бы использовать только 1 проект, но я не знаю, как netbeans создаст файл Jar. Мне нужно, если это возможно, и если да, то как это настроить.

Ответы [ 4 ]

8 голосов
/ 06 февраля 2010

Спецификация файла JAR допускает только один атрибут Main-Class на JAR, но JAR может иметь произвольное количество классов, которые объявляют метод main(). Любой такой класс будет включен в свойство проекта Build Packaging, если специально не исключено.

В качестве конкретного примера, База данных H2 включает эти классы с 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

Приложение: По-видимому, мой проект мусорной корзины нуждается в обслуживании.

$ find scratch/src -name \*java | xargs -J % egrep 'main[ \t]*\(Str' % | wc -l
     109
4 голосов
/ 06 февраля 2010

Я не знаю, как работает Netbeans, но не должно быть проблем с размещением более одного основного класса в JAR. На самом деле главный класс - это просто класс, имеющий метод main, а JAR - это набор файлов классов.
Единственным ограничением является то, что может быть только один класс, который будет запущен двойным щелчком JAR.

Для запуска каждого класса вы не должны использовать опцию -jar, а указывать полное имя класса.
Например, если в вашем JAR-классе есть класс Client и Server, клиент запускается с помощью
java -cp file.jar Client
и сервер по
java -cp file.jar Server.

Можно создать третий класс starter , используемый для запуска сервера или клиента на основе аргумента командной строки (или окна графического интерфейса пользователя).

3 голосов
/ 06 февраля 2010

Я считаю, что назначение «основного класса» означает, что конечный файл манифеста JAR будет помечать один класс как «класс для запуска»: так что конечный пользователь может просто дважды щелкнуть по нему * или запустить упрощенная командная строка, например:

java -jar <jar>

вместо указания полного имени пакета / класса, например:

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

Если я прав, то не понимаю, как было бы целесообразно иметь более одного основного класса? Может быть, я неправильно понял ваш вопрос - или у «основного» класса есть другая цель?

Если вы имеете в виду наличие двух классов, у которых есть метод 'main' - тогда это нормально - конечный пользователь может запустить любой из классов по имени - и при условии, что у них есть стандартный метод main, например, sig:

public static void main(String[] args)

это должно просто сработать.

* (по крайней мере на Windows, и то, работает ли это, также зависит от того, какая у них JRE и, возможно, другие вещи)

0 голосов
/ 22 марта 2018

В netbeans, если вы хотите создать jar-файл вашего проекта с выбранным основным классом, 1. щелкните правой кнопкой мыши свой проект (Если вы не смогли найти свой проект, перейдите в окно -> Проект из меню NetBeans) 2. Перейти к настройке конфигурации -> Настройка. 3. Выберите прогон из категории. В основном классе напишите ваше имя_пакета.classname (т.е. вы создали файл xyz в mypackage, затем напишите mypackage.xyz) 4. нажмите ок.
5. Снова щелкните правой кнопкой мыши на имени проекта, выберите «Очистить и собрать». 6. Ваш файл JAR создается в месте вашего имени проекта -> dist -> projectname.jar

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...