Можно ли в одном проекте создать несколько выполняемых или jar файлов?

Да, в Java можно создавать несколько выполняемых файлов или JAR-архивов в одном проекте.

Каждый JAR-архив представляет собой сжатый файл, в котором содержится один или несколько классов, библиотек, ресурсов или других файлов, необходимых для выполнения программы. JAR-архивы в Java используются для организации и упаковки программного кода и ресурсов в один файл, что облегчает его распространение и использование в различных средах выполнения Java.

Чтобы создать несколько JAR-архивов в одном проекте, вы можете использовать средства сборки проекта, такие как Maven или Gradle. Эти инструменты позволяют конфигурировать и создавать различные артефакты проекта, включая JAR-файлы.

В проекте может быть несколько точек входа, каждая из которых может быть упакована в отдельный JAR-архив. Это полезно, например, если вы разрабатываете набор инструментов или библиотеку, которая предоставляет различные функциональные возможности, и вы хотите иметь возможность использовать каждую из этих возможностей независимо от других. Или если у вас есть основная программа и несколько дополнительных модулей или расширений, которые могут быть упакованы в отдельные JAR-архивы.

Чтобы создать JAR-архив в Maven, вы должны определить соответствующую информацию в файле pom.xml, включая зависимости, ресурсы, классы и точку входа. Следующий пример показывает, как определить конфигурацию для создания JAR-архива с помощью Maven:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.2.0</version>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>com.example.MainClass</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
    </plugins>
</build>

Аналогично, в Gradle вы можете определить конфигурацию для создания JAR-архива в файле build.gradle:

jar {
    manifest {
        attributes 'Main-Class': 'com.example.MainClass'
    }
}

Оба инструмента также позволяют вам настраивать атрибуты JAR-архива, включая зависимости, ресурсы, контрольные суммы и другие метаданные.

В итоге, создав несколько JAR-архивов в одном проекте, вы сможете иметь разделение функциональности и логику на независимые компоненты, что может быть полезно для организации проекта, облегчения сопровождения и повторного использования кода.