← Назад к вопросам
Запустится ли проект при добавлении файлов с методами main в программу
1.0 Junior🔥 71 комментариев
#ООП#Основы Java
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
# Запустится ли проект при добавлении файлов с методами main?
Краткий ответ
ДА, проект запустится, но с условиями:
- Нужно явно указать, какой main вызывать (на какой класс)
- Наличие дополнительных методов main в других файлах не помешает выполнению
- Без явного указания главного класса возникнет ошибка
Разъяснение
В одном классе
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
Запуск:
java HelloWorld
# Вывод: Hello, World!
Проект запустится успешно.
С несколькими файлами с main
// Main1.java
public class Main1 {
public static void main(String[] args) {
System.out.println("Это Main1");
}
}
// Main2.java
public class Main2 {
public static void main(String[] args) {
System.out.println("Это Main2");
}
}
// Main3.java
public class Main3 {
public static void main(String[] args) {
System.out.println("Это Main3");
}
}
Результат:
- Проект скомпилируется без ошибок (все три класса скомпилируются)
- Но для запуска нужно явно указать, какой main вызывать:
java Main1 # Запустит Main1.main()
java Main2 # Запустит Main2.main()
java Main3 # Запустит Main3.main()
Без указания какого main вызывать:
java # Ошибка: no main manifest attribute in /path/to/file.jar
В контексте IDE (IntelliJ, Eclipse, VSCode)
IntelliJ IDEA
Когда вы кликаете "Run" в IDE:
public class Main1 {
public static void main(String[] args) { }
}
public class Main2 {
public static void main(String[] args) { }
}
- IDE покажет диалог: "Выберите какой main запустить"
- Вы выбираете нужный
- Проект запустится успешно
Eclipse
Аналогично:
- Правый клик на файле → Run As → Java Application
- Выбираете нужный класс с main
- Запускается нужный main
Консоль (Command Line)
javac *.java # Компилируем ВСЕ файлы
java Main1 # Запускаем конкретный Main1
# Вывод: результат Main1
В контексте JAR файла
При упаковке в JAR
Если у вас несколько main методов, при создании JAR обязательно указать главный класс в манифесте:
Manifest-Version: 1.0
Main-Class: Main1
При запуске JAR:
java -jar application.jar # Запустит Main1
Если не указать Main-Class:
java -jar application.jar
# Ошибка: no main manifest attribute
Но вы можете запустить конкретный класс:
java -cp application.jar Main2 # Запустит Main2
В контексте Spring Boot приложения
Spring Boot Application
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Есть ещё другой класс с main:
public class Utility {
public static void main(String[] args) {
System.out.println("Утилита");
}
}
В pom.xml:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.example.Application</mainClass>
</configuration>
</plugin>
Результат:
- При
mvn spring-boot:runзапустится только Application.main() - Utility.main() не запустится (он просто существует в классе)
- При
mvn clean installсоздастся JAR с Application как главным классом
Можно ли запустить оба main одновременно?
НА, каждый процесс Java может иметь только один главный main.
Но вы можете запустить несколько процессов:
# Терминал 1:
java Main1
# Терминал 2:
java Main2
# Теперь работают ОБА main одновременно в разных процессах
Практический пример
// Main.java
public class Main {
public static void main(String[] args) {
System.out.println("Главное приложение");
}
}
// Test.java
public class Test {
public static void main(String[] args) {
System.out.println("Тестовый класс");
}
}
// Utils.java
public class Utils {
public static void main(String[] args) {
System.out.println("Утилита");
}
}
Компиляция:
javac Main.java Test.java Utils.java
# Создастся: Main.class, Test.class, Utils.class
Запуск:
java Main # Hello from Main
java Test # Hello from Test
java Utils # Hello from Utils
Best Practice
✅ Правильный подход
// Application.java - единственный main для приложения
public class Application {
public static void main(String[] args) {
// инициализация приложения
}
}
// Тесты используют другие методы, не main
@Test
public void testSomething() {
// тест
}
❌ Неправильный подход
// Много классов с main для тестирования
public class QuickTest {
public static void main(String[] args) { }
}
public class AnotherTest {
public static void main(String[] args) { }
}
public class DebugTest {
public static void main(String[] args) { }
}
Лучше использовать unit tests (JUnit) вместо main методов для тестирования.
Заключение
- Несколько main методов — это нормально, они не конфликтуют
- При запуске нужно явно указать какой класс запускать
- В IDE обычно появляется диалог выбора
- В JAR файле главный класс указывается в манифесте (Main-Class)
- Best practice: иметь один главный Application класс, остальное — unit tests или утилиты
Добавление файлов с методами main не помешает запуску проекта, но потребует явного указания точки входа.