← Назад к вопросам

Запустится ли проект при добавлении файлов с методами 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 методов для тестирования.

Заключение

  1. Несколько main методов — это нормально, они не конфликтуют
  2. При запуске нужно явно указать какой класс запускать
  3. В IDE обычно появляется диалог выбора
  4. В JAR файле главный класс указывается в манифесте (Main-Class)
  5. Best practice: иметь один главный Application класс, остальное — unit tests или утилиты

Добавление файлов с методами main не помешает запуску проекта, но потребует явного указания точки входа.