Поширена проблема, з якою стикаються нові розробники Java, полягає в тому, що їхні програми не працюють із повідомленням про помилку: Could not find or load main class ...
Що це означає, що це викликає, і як ви повинні це виправити?
Поширена проблема, з якою стикаються нові розробники Java, полягає в тому, що їхні програми не працюють із повідомленням про помилку: Could not find or load main class ...
Що це означає, що це викликає, і як ви повинні це виправити?
Відповіді:
java <class-name>синтаксис командиПерш за все, потрібно зрозуміти правильний спосіб запуску програми за допомогою команди java(або javaw).
Нормальний синтаксис 1 такий:
java [ <options> ] <class-name> [<arg> ...]
де <option>варіант командного рядка (починаючи з символу "-"), <class-name>є повністю кваліфікованим іменем класу Java і <arg>є довільним аргументом командного рядка, який передається вашій програмі.
1 - Є деякі інші синтаксиси, які описані наприкінці цієї відповіді.
Повнокваліфіковане ім’я (FQN) для класу умовно записується так, як і у вихідному коді Java; напр
packagename.packagename2.packagename3.ClassName
Однак деякі версії javaкоманди дозволяють використовувати косої риски замість періодів; напр
packagename/packagename2/packagename3/ClassName
який (заплутано) схожий на ім’я файлу, але не є одним. Зауважте, що термін повністю кваліфікована назва - це стандартна термінологія Java ... не те, що я щойно придумав, щоб вас бентежити :-)
Ось приклад того, як javaповинна виглядати команда:
java -Xmx100m com.acme.example.ListUsers fred joe bert
Вищезазначене призведе до того, що javaкоманда виконає наступне:
com.acme.example.ListUsersкласу.mainметод з підписом , типом повернення та модифікаторами, заданими public static void main(String[]). (Зверніть увагу, ім'я аргументу методу НЕ є частиною підпису.)String[].Коли ви отримуєте повідомлення "Не вдалося знайти або завантажити основний клас ...", це означає, що перший крок не вдався. javaКоманда не змогла знайти клас. І справді, "..." у повідомленні буде цілком кваліфіковане ім'я класу, яке javaшукається.
То чому б він не зміг знайти клас?
Перша вірогідна причина полягає в тому, що ви, можливо, вказали неправильну назву класу. (Або ... правильне ім'я класу, але в неправильній формі.) Розглядаючи приклад, наведений вище, тут є різні помилкові способи вказати назву класу:
Приклад №1 - проста назва класу:
java ListUser
Коли клас оголошено в такому пакеті, як com.acme.example, то ви повинні використовувати повне ім'я класу, включаючи ім'я пакета в javaкоманді; напр
java com.acme.example.ListUserПриклад №2 - ім'я файлу або шлях, а не ім'я класу:
java ListUser.class
java com/acme/example/ListUser.classПриклад №3 - назва класу з корпусом неправильним:
java com.acme.example.listuserПриклад №4 - помилка друку
java com.acme.example.mistuserПриклад №5 - ім'я вихідного файлу (крім Java 11 або новішої версії; див. Нижче)
java ListUser.javaПриклад №6 - ви повністю забули ім'я класу
java lots of argumentsДруга ймовірна причина полягає в тому, що ім'я класу правильне, але що javaкоманда не може знайти клас. Щоб зрозуміти це, потрібно зрозуміти поняття "класової". Це добре пояснюється документацією Oracle:
javaдокументація командиОтже ... якщо ви правильно вказали ім'я класу, наступне, що потрібно перевірити, це те, що ви вказали класний шлях правильно:
javaкоманди. Перевірте правильність імен каталогів та імен файлів JAR.javaкоманди.;в Windows та :інших. Якщо ви використовуєте неправильний роздільник для своєї платформи, ви не отримаєте явного повідомлення про помилку. Натомість ви отримаєте неіснуючий файл або каталог на шляху, який буде мовчазно ігноруватися. .)Коли ви кладете каталог на classpath, він умовно відповідає кореню простору імен кваліфікованих. Класи розташовані в структурі каталогів під цим коренем, шляхом зіставлення повністю кваліфікованого імені до імені шляху . Наприклад, якщо "/ usr / local / acme / class" знаходиться на шляху до класу, тоді, коли JVM шукає клас, який називається com.acme.example.Foon, він буде шукати файл ".class" з таким ім'ям шляху:
/usr/local/acme/classes/com/acme/example/Foon.class
Якби ви поставили "/ usr / local / acme / class / com / acme / example" на classpath, то JVM не змогла б знайти клас.
Якщо FQN ваших класів є com.acme.example.Foon, то JVM шукатиме "Foon.class" у каталозі "com / acme / example":
Якщо структура вашого каталогу не відповідає іменуванню пакета згідно з вищевказаним зразком, JVM не знайде вашого класу.
Якщо ви спробуєте перейменувати клас, перемістивши його, це також вийде з ладу ... але стек-трак винятків буде іншим. Можна сказати щось подібне:
Caused by: java.lang.NoClassDefFoundError: <path> (wrong name: <name>)
оскільки FQN у файлі класу не відповідає тому, що завантажувач класів очікує знайти.
Навести конкретний приклад, припустивши, що:
com.acme.example.Foonклас,/usr/local/acme/classes/com/acme/example/Foon.class,/usr/local/acme/classes/com/acme/example/,тоді:
# wrong, FQN is needed
java Foon
# wrong, there is no `com/acme/example` folder in the current working directory
java com.acme.example.Foon
# wrong, similar to above
java -classpath . com.acme.example.Foon
# fine; relative classpath set
java -classpath ../../.. com.acme.example.Foon
# fine; absolute classpath set
java -classpath /usr/local/acme/classes com.acme.example.Foon
Примітки:
-classpathпараметр можна скоротити до -cpбільшості версій Java. Перевірте відповідні записи вручну для java, javacі так далі.Класовий шлях повинен включати всі інші (несистемні) класи, від яких залежить ваша програма. (Класи системи розташовуються автоматично, і вам рідко потрібно зайнятися цим.) Щоб основний клас завантажився правильно, JVM повинен знайти:
(Примітка: специфікації JLS та JVM дозволяють деякому простору для JVM завантажувати класи "ліниво", і це може вплинути на викид винятку завантажувача класів.)
Іноді трапляється, що хтось ставить файл вихідного коду в неправильну папку у своєму дереві вихідного коду, або вони залишають packageдекларацію. Якщо ви зробите це в IDE, компілятор IDE повідомить вам про це негайно. Аналогічно, якщо ви використовуєте гідний інструмент збірки Java, інструмент запуститься javacтаким чином, що виявить проблему. Однак, якщо ви будуєте свій код Java вручну, ви можете зробити це таким чином, щоб компілятор не помітив проблеми, а отриманий файл ".class" знаходиться не в тому місці, яке ви очікуєте.
Перевірити можна багато речей, і легко щось пропустити. Спробуйте додати -Xdiagпараметр до javaкомандного рядка (як перше після цього java). Він виведе різні речі про завантаження класу, і це може запропонувати вам підказки щодо справжньої проблеми.
Також розглянемо можливі проблеми, спричинені копіюванням та вставкою невидимих або не ASCII символів з веб-сайтів, документів тощо. І розглянемо "гомогліфи", дві літери чи символи виглядають однаково ... але ні.
Нарешті, ви, мабуть, можете зіткнутися з цією проблемою, якщо спробувати запустити файл JAR з неправильними підписами в (META-INF/*.SF).
javaІснують три альтернативних синтаксиси для запуску програм Java з використанням java command.
1) Синтаксис, що використовується для запуску "виконуваного" файлу JAR, такий:
java [ <options> ] -jar <jar-file-name> [<arg> ...]
напр
java -Xmx100m -jar /usr/local/acme-example/listuser.jar fred
Ім'я класу вхідної точки (тобто com.acme.example.ListUser) та шлях класу задаються у МАНІФЕСТІ файлу JAR.
2) Синтаксис запуску програми з модуля (Java 9 та новіших версій) такий:
java [ <options> ] --module <module>[/<mainclass>] [<arg> ...]
Назва класу вхідних точок визначається <module>самим, або надається необов'язково <mainclass>.
3) З Java 11 ви можете скласти та запустити один файл вихідного коду та запустити його із наступним синтаксисом:
java [ <options> ] <sourcefile> [<arg> ...]
де (як правило) файл із суфіксом ".java".
Для отримання більш детальної інформації див. Офіційну документацію для javaкоманди для випуску Java, яку ви використовуєте.
Типовий Java IDE підтримує запуск Java-програм у самому IDE JVM або в дочірньому JVM. Вони, як правило, захищені від цього конкретного винятку, оскільки IDE використовує власні механізми для побудови класного javaмаршруту виконання, ідентифікації основного класу та створення командного рядка.
Однак це виняток все-таки може виникнути, якщо ви робите речі за спиною IDE. Наприклад, якщо ви раніше встановили запуск програми для свого додатка Java в Eclipse, а потім перенесли файл JAR, що містить "головний" клас, в інше місце у файловій системі, не повідомляючи Eclipse , Eclipse мимоволі запустить JVM з неправильним класовим шляхом.
Якщо коротко, якщо ви отримаєте цю проблему в IDE, перевірте, чи немає таких речей, як несвіжий стан IDE, пошкоджені посилання на проект чи зламані конфігурації запуску.
Також можна IDE просто плутати. IDE - це надзвичайно складні програми, що містять багато взаємодіючих частин. Багато з цих частин застосовують різні стратегії кешування, щоб зробити IDE в цілому чуйним. Вони іноді можуть піти не так, і одним із можливих симптомів є проблеми під час запуску програм. Якщо ви підозрюєте, що це може статися, варто спробувати інші речі, такі як перезапуск IDE, відновлення проекту тощо.
java -cp ../third-party-library.jar com.my.package.MyClass; це не працює, замість цього потрібно додати локальну папку до шляху до класу (відокремлено :, як це:, java -cp ../third-party-library.jar:. com.my.package.MyClassтоді воно має працювати
javaне сказано, що він не знаходить імпортований клас, а натомість основний клас, який ви намагаєтеся запустити. Це вводить в оману, хоча я впевнений, що в цьому є причина. У мене був випадок, коли javaточно знали, де знаходиться мій клас, проте він не міг знайти жодного із імпортованих класів. Замість того, щоб сказати, він скаржився на те, що не знайшов свого основного класу. Дійсно, дратує.
Якщо ваш вихідний код ім'я HelloWorld.java, ваш компільований код буде HelloWorld.class.
Ви отримаєте цю помилку, якщо ви будете називати її за допомогою:
java HelloWorld.class
Замість цього скористайтеся цим:
java HelloWorld
javac TestCode.javaза нимjava TestCode
java -classpath . HelloWorld
Якщо ваші класи містяться в пакетах, вам доведеться перейти cdдо кореневого каталогу вашого проекту та запустити, використовуючи повністю кваліфіковане ім’я класу (packageName.MainClassName).
Приклад:
Мої заняття тут:
D:\project\com\cse\
Повноцінне ім’я мого основного класу:
com.cse.Main
Тому я cdповертаюся до кореневого каталогу проекту:
D:\project
Потім видайте javaкоманду:
java com.cse.Main
Ця відповідь призначена для того, щоб врятувати початківців програмістів Java від розчарування, спричиненого поширеною помилкою, я рекомендую вам прочитати прийняту відповідь, щоб отримати більш глибокі знання про клас Java.
Якщо ви визначаєте головний клас та основний метод у apackage , слід запустити його над ієрархічним каталогом, використовуючи повне ім’я класу ( packageName.MainClassName).
Припустимо, є файл вихідного коду (Main.java):
package com.test;
public class Main {
public static void main(String[] args) {
System.out.println("salam 2nya\n");
}
}
Для запуску цього коду слід розмістити Main.Classв папці, як каталог ./com/test/Main.Java. І в кореневому каталозі використовуйте java com.test.Main.
Коли той самий код працює на одному ПК, але він показує помилку в іншому, найкращим рішенням, який я коли-небудь знайшов, є компілювання, як наступне:
javac HelloWorld.java
java -cp . HelloWorld
javac -classpath . HelloWorld.javaпрацював би! І це краще рішення у вашому випадку.
Що допомогло мені, було вказати класний шлях у командному рядку, наприклад:
Створіть нову папку, C:\temp
Створіть файл Temp.java в C:\temp, із таким класом:
public class Temp {
public static void main(String args[]) {
System.out.println(args[0]);
}
}Відкрийте командний рядок у папці C:\tempта напишіть таку команду, щоб скласти клас Temp:
javac Temp.javaЗапустіть компільований клас Java, додавши -classpathможливість повідомити JRE, де знайти клас:
java -classpath C:\temp Temp Hello!javaне дивився на $ CLASSPATH (тому що ти використовував -classpath або -jar) або 2) параметр classpath не був встановлений у середовищі, що не діяло в контексті, що javaбув бігати; наприклад, тому що ви не "джерело" файлу, де додано команди setenv у правій оболонці.
Відповідно до повідомлення про помилку ("Не вдалося знайти або завантажити основний клас"), існує дві категорії проблем:
Неможливо знайти основний клас, коли в повному кваліфікованому імені класу є помилка друку або неправильний синтаксис або він не існує на передбаченому шляху .
Не вдалося завантажити основний клас, коли клас неможливо ініціювати основний клас, , як правило, основний клас поширює інший клас, і цей клас не існує на передбаченому шляху.
Наприклад:
public class YourMain extends org.apache.camel.spring.Main
Якщо пружина верблюда не включена, про цю помилку буде повідомлено.
extends). Я тільки що навчився важко, що коли основний клас не завантажується, тому що він розширює інший, який неможливо було знайти , java не повідомляє, який фактичний клас не знайдено (на відміну від NoClassDefFoundError). Так так, це трапляється, і це ситуація з підтягуванням волосся, коли ти цього не знаєш.
У мене була така помилка в цьому випадку:
java -cp lib.jar com.mypackage.Main
Він працює ;для Windows та :Unix:
java -cp lib.jar; com.mypackage.Main
Mainфайл не знаходиться у файлі JAR. -cp lib.jar;означає те саме, що -cp lib.jar;. тобто поточний каталог включений на classpath.
Спробуйте -Xdiag .
Відповідь Стіва С прекрасно висвітлює можливі випадки, але іноді визначити, чи не можна було знайти клас або завантажити клас, не так просто. Використовуйте java -Xdiag(з JDK 7). Це виводить приємну стежку, яка дає підказку, що Could not find or load main classозначає повідомлення повідомлення.
Наприклад, він може вказувати на інші класи, що використовуються основним класом, які не вдалося знайти, і не дозволяли завантажувати основний клас.
Використовуйте цю команду:
java -cp . [PACKAGE.]CLASSNAME
Приклад: Якщо ваше ім'я Hello.class створено з Hello.java, тоді скористайтеся командою нижче:
java -cp . Hello
Якщо ваш файл Hello.java знаходиться в пакеті com.demo, тоді скористайтеся командою нижче
java -cp . com.demo.Hello
З JDK 8 багато разів трапляється, що файл класу присутній в одній папці, але javaкоманда очікує classpath і з цієї причини ми додаємо -cp .взяти поточну папку як орієнтир для classpath.
-cp .непотрібно, тому що якщо $CLASSPATHце не встановлено, то .це класний шлях за замовчуванням.
echo %CLASSPATH%вихід?) І ні, я не можу перевірити, оскільки у мене немає ПК з Windows.
Іноді те, що може спричинити проблему, не має нічого спільного з основним класом, і мені довелося це знайти важко. Я переїхав до бібліотеки, на яку я посилався, і вона мені:
Не вдалося знайти або завантажити основний xxx Linux
Я просто видалив цю посилання, додав її знову, і вона спрацювала нормально.
У цьому випадку у вас є:
Не вдалося знайти або завантажити основний клас ? Classpath
Це тому, що ви використовуєте "-classpath", але тире не є тим самим тире, яке використовується javaв командному рядку. У мене виникла проблема копіювання та вставлення з Блокнота до cmd.
У мене була така ж проблема, і нарешті я виявив свою помилку :) Я використовував цю команду для компіляції, і вона справно працювала:
javac -cp "/home/omidmohebbi/AAAATest/jars/core-1.7.jar:/home/omidmohebbi/AAAATest/jars/javase-1.7.jar:/home/omidmohebbi/AAAATest/jars/qrgen-1.2.jar" qrcode.java
Але ця команда не працювала для мене (я не зміг знайти або завантажити основний клас, qrcode):
java -cp "/home/omidmohebbi/AAAATest/jars/core-1.7.jar:/home/omidmohebbi/AAAATest/jars/javase-1.7.jar:/home/omidmohebbi/AAAATest/jars/qrgen-1.2.jar" qrcode
Нарешті я просто додав символ ":" наприкінці класового шляху і проблема була вирішена:
java -cp "/home/omidmohebbi/AAAATest/jars/core-1.7.jar:/home/omidmohebbi/AAAATest/jars/javase-1.7.jar:/home/omidmohebbi/AAAATest/jars/qrgen-1.2.jar:" qrcode
Це може допомогти вам, якщо ваш випадок подібний моєму: як початківець я також зіткнувся з цією проблемою, коли намагався запустити програму Java.
Я склав це так:
javac HelloWorld.java
І я спробував запустити також з тим же розширенням:
java Helloworld.java
Коли я видалив .javaта переписав команду на кшталт java HelloWorld, програма працювала ідеально. :)
Усі відповіді тут спрямовані на користувачів Windows, здається. Для Mac роздільник класового шляху є :, ні ;. Оскільки помилка при встановленні classpath за допомогою ;не викидається, це може виявити важко, якщо ви переходите з Windows на Mac.
Ось відповідна команда Mac:
java -classpath ".:./lib/*" com.test.MyClass
Там, де в цьому прикладі є пакет com.testі libпапка, яка також повинна бути включена на classpath.
/*це потрібно?
Розташування файлу класу: C: \ test \ com \ company
Назва файлу: Main.class
Повністю кваліфікована назва класу: com.company.Main
Команда командного рядка:
java -classpath "C:\test" com.company.Main
Зауважте тут, що шлях до класу НЕ включає \ com \ company
Я витратив гідну кількість часу, намагаючись вирішити цю проблему. Я думав, що я якось неправильно встановлював свій класний шлях, але проблема полягала в тому, що я набрав:
java -cp C:/java/MyClasses C:/java/MyClasses/utilities/myapp/Cool
замість:
java -cp C:/java/MyClasses utilities/myapp/Cool
Я подумав, що значення цілком кваліфікованого означає включати повну назву шляху замість повної назви пакета.
utilities.myapp.Coolабо як його назва пакету, якщо він є.
Спочатку встановіть шлях за допомогою цієї команди;
set path="paste the set path address"
Потім потрібно завантажити програму. Наберіть "cd (ім'я папки)" на збереженому диску і компілюйте його. Наприклад, якщо моя програма зберігається на дисководі D, введіть "D:", натисніть клавішу enter і введіть "cd (назва папки)".
if "cd" helps then it by luck rather than by judgement. Це неправильно (я вважаю), оскільки java використовує поточний каталог .як частину classpath за замовчуванням.
Що вирішило проблему в моєму випадку:
Клацніть правою кнопкою миші проект / клас, який потрібно запустити, а потім Run As-> Run Configurations. Тоді вам слід виправити наявну конфігурацію або додати нову наступним чином:
відкрийте Classpathвкладку, натисніть Advanced...кнопку, а потім додайте binпапку вашого проекту.
Якщо ви використовуєте Maven для створення файлу JAR, будь ласка, обов'язково вкажіть основний клас у файлі pom.xml:
<build>
<plugins>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>class name us.com.test.abc.MyMainClass</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
Це конкретний випадок, але оскільки я зайшов на цю сторінку, шукаючи рішення, і не знайшов його, я додам його сюди.
Windows (тестовано з 7) не приймає спеціальних символів (наприклад á) у назвах класів та пакетів. Linux, однак, робить.
Я це з'ясував, коли створив .jarNetBeans і спробував запустити його в командному рядку. Він працював у NetBeans, але не в командному рядку.
У Windows .;на початку поставте значення CLASSPATH.
The. (крапка) означає "шукати в поточному каталозі". Це постійне рішення.
Також ви можете встановити його "один раз" за допомогою набору CLASSPATH=%CLASSPATH%;.. Це триватиме до тих пір, поки ваше вікно cmd буде відкрито.
Вам справді потрібно зробити це з srcпапки. Там ви вводите такий командний рядок:
[name of the package].[Class Name] [arguments]
Скажімо, ваш клас називається CommandLine.class, і код виглядає так:
package com.tutorialspoint.java;
/**
* Created by mda21185 on 15-6-2016.
*/
public class CommandLine {
public static void main(String args[]){
for(int i=0; i<args.length; i++){
System.out.println("args[" + i + "]: " + args[i]);
}
}
}
Тоді вам слід cdперейти до папки src, і команда, яку потрібно виконати, виглядатиме так:
java com.tutorialspoint.java.CommandLine this is a command line 200 -100
А вихід у командному рядку буде:
args[0]: this
args[1]: is
args[2]: a
args[3]: command
args[4]: line
args[5]: 200
args[6]: -100
cdувійти, srcа потім запустити команду, java ../bin com.blah.blah.MyClassяка працювала на мене. Тож дякую за пораду!
У Java, коли ви іноді запускаєте JVM з командного рядка за допомогою виконуваного файлу java і намагаєтеся запустити програму з класового файлу з загальнодоступним статичним void main (PSVM), ви можете зіткнутися з помилкою нижче, хоча параметр classpath до JVM точний, і файл класу присутній на classpath:
Error: main class not found or loaded
Це відбувається, якщо файл класу з PSVM не вдалося завантажити. Однією з можливих причин цього є те, що клас може реалізовувати інтерфейс або розширювати інший клас, який відсутній на шляху. Як правило, якщо клас не знаходиться на шляху до класу, викинута помилка вказується як така. Але, якщо клас, що використовується, розширений або впроваджений, java не може завантажити сам клас.
Довідка: https://www.computingnotes.net/java/error-main-class-not-found-or-loaded/
При запуску javaз -cpпараметром , як рекламується в Windows PowerShell , ви можете отримати помилку , яка виглядає приблизно так:
The term `ClassName` is not recognized as the name of a cmdlet, function, script ...
Для того, щоб PowerShell прийняв команду, аргументи цього -cpпараметра повинні міститись у лапках, як у:
java -cp 'someDependency.jar;.' ClassName
Формування команди таким чином повинно дозволяти Java обробляти аргументи classpath правильно.
Я також зіткнувся з подібними помилками під час тестування з'єднання Java MongoDB JDBC. Я думаю, що добре узагальнити моє остаточне рішення коротко, щоб в майбутньому хтось міг безпосередньо заглянути в дві команди і добре продовжувати далі.
Припустимо, ви знаходитесь в каталозі, де існує ваш файл Java та зовнішні залежності (файли JAR).
Збірка:
javac -cp mongo-java-driver-3.4.1.jar JavaMongoDBConnection.java
Виконати:
java -cp mongo-java-driver-3.4.1.jar: JavaMongoDBConnection
JavaMongoDBConnectionне має пакета, і 2) ви не змінюєте каталог. Воно, найменше, крихке. І не пояснюючи проблеми, це призведе до того, щоб новачки спробували цей підхід у ситуаціях, коли це не спрацює . Коротше кажучи, це заохочує "методики програмування вуду": en.wikipedia.org/wiki/Voodoo_programming
Гаразд, відповідей уже багато, але ніхто не згадав про випадок, коли винуватці дозволу на файли можуть бути винуватими.
Під час запуску користувач може не мати доступу до файлу JAR або до одного з каталогів шляху. Наприклад, врахуйте:
Файл Jar в /dir1/dir2/dir3/myjar.jar
User1, якому належить файл JAR, може:
# Running as User1
cd /dir1/dir2/dir3/
chmod +r myjar.jar
Але це все ще не працює:
# Running as User2
java -cp "/dir1/dir2/dir3:/dir1/dir2/javalibs" MyProgram
Error: Could not find or load main class MyProgram
Це відбувається тому, що працюючий користувач (User2) не має доступу до dir1, dir2, або javalibs або dir3. Це може призвести до того, що User1 перетворить гайки, коли User1 може бачити файли та отримувати доступ до них, але помилка все ж трапляється для User2.
Я отримав цю помилку після цього. mvn eclipse:eclipse
Це .classpathтрохи заплутало мій файл.
Довелося змінити рядки в .classpathз
<classpathentry kind="src" path="src/main/java" including="**/*.java"/>
<classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
до
<classpathentry kind="src" path="src/main/java" output="target/classes" />
<classpathentry kind="src" path="src/main/resources" excluding="**" output="target/classes" />
Я не зміг вирішити цю проблему за допомогою наведених тут рішень (хоча зазначена відповідь, без сумніву, очистила мої концепції). Я стикався з цією проблемою два рази, і кожен раз, коли я пробував різні рішення (в Eclipse IDE).
mainметодами в різних класах свого проекту. Отже, я видалив mainметод з наступних класів.mainметодів не усуне проблему. З додатком, який має кілька точок входу, технічно немає нічого поганого.