Кофейные пидоры, помогите, у меня кажется кофе-машина сломалась
Долгая история коротко: пытаюсь запаковать себе JAR, но как бы я не извращался, выдаёт одну и ту же ошибку: "Could not find or load main class". Советы из интернета не помогли. Даже разные ИДЕ не помогли.
Попытка просто сделать мавеновский Hello World тоже выдаёт ту же ошибку!
Подробнее
C:\Users\ZD\eclipse-workspace\servlets\texlog\target>java -Xdiag texlog-0.0.1-SNAPSHOT.jar Error: Could not find or load main class texlog-0.0.1-SNAPSHOT.jar Caused by: java.lang.ClassNotFoundException: texlog-0.0.1-SNAPSHOT.jar java.lang.ClassNotFoundException: texlog-0.0.1-SNAPSHOT.jar at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522) at java.base/java.lang.Class.forName0(Native Method) at java.base/java.lang.Class.forName(Class.java:398) at java.base/sun.launcher.LauncherHelper.loadMainClass(LauncherHelper.java:791) at java.base/sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:686)
КУПОН НА 1 помощь
java,программирование,geek,Прикольные гаджеты. Научный, инженерный и айтишный юмор,пидоры помогите,реактор помоги
Еще на тему
сменить язык?
Для меня пункт 2.2 всегда собирает без проблем.
Можно еще maven-compiler plugin в пом дообавить.
Ну или на крайняк спринг подключить. Там обычно хватает:
org.springframework.boot
spring-boot-maven-plugin
3.0.4
Проект со спрингом выдаёт ту же ошибку
java -cp
java -jar
То есть у тебя воспринимается команда как запуск класса по имени «texlog-0.0.1-SNAPSHOT.jar» из пустого classpath. Либо пиши «java -jar texlog-0.0.1-SNAPSHOT.jar» (доп. параметры я опустил), либо «java -cp texlog-0.0.1-SNAPSHOT.jar myPackage.Main». Мейвен, кстати, имеет отдельную команду для запуска: «mvn exec:java -Dexec.mainClass=…», если нет желания зависимости собирать («mvn deependency:copy-dependencies»).
А вообще разберись когда-нибудь с утилитой jar, как вручную паковать/распаковывать архивы, где там лежат классы, сервисы (это файл, позволяющий автозапускать службы), как через системный загрузчик классов искать и загружать классы. В целом выгодно держать кучу jar-ов, при запуске скриптом каким-нибудь собирать их в -cp … и получается отличный интерфейс для плагинов с помощью сервисов в META-INF, особенно если годные фреймворки и архитектуру используешь.
До этого почему-то работало :/
> «java -cp texlog-0.0.1-SNAPSHOT.jar myPackage.Main»
Результат тот же. Та же ошибка
myPackage — это пакет, который пишется в начале файла #package …
Main — это название твоего класса, содержащего главную функцию.
После -cp идёт строка, разделённая : или ; (зависит от ОС) с путями до jar-ов или их содержимым в распакованном виде, а в конце — ссылка на класс с полным путём к нему (как будто делаешь import).
После -jar идёт сам убер-джар (в который все зависимости встроены и прописан мейн-класс).
Если у тебя не работает «java -jar texlog-0.0.1-SNAPSHOT.jar», то пробуй второй вариант («java -cp texlog-0.0.1-SNAPSHOT.jar твойМейнКлассСПолнымПутёмЧерезТочки»), сработает — гугли как указать мейн класс в META-INF (если оно тебе вообще надо и почему у тебя плагин для мейвена это не сделал), не сработает — смотри что у тебя в jar-е (должно быть пожатое содержимое target/classes/ плюс все зависимости), пробуй запустить без упаковывания и изучай как работает classpath.
java.lang.ClassNotFoundException: texlog-0.0.1-SNAPSHOT.jar, т.е. он это как название класса воспринимает.
Приложи вывод «java -jar texlog-0.0.1-SNAPSHOT.jar».
Если могу отнять у тебя ещё минутку... Пробелму-то я решил, но наткнулся на новую: (зависимости Лог4Ж2, требует лог менеджера, который уже в зависимостях)
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/logging/log4j/LogManager
at mecha.logic.Exchangelogic.(Exchangelogic.java:13)
at mecha.Main.main(Main.java:32)
Caused by: java.lang.ClassNotFoundException: org.apache.logging.log4j.LogManager
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:527)
Еще очень удобно сгенерировать и скачать рабочий скелет проекта тут https://start.spring.io/
Дальше можно смотреть как мейвеновские плагины настроены в .pom файлах и что в /target лежит, а там обычно 2 jar файлика, один fat jar (или uber jar) со всеми зависимостями и обычный jar без зависимостей.
Тебе нужен тот что по размеру будет больше =)
Ну и запускаешь как тут уже написали несколько раз
java -cp your_jar_name.jar fully.qualified.package.name.YourMainClassName
НОРМАЛЬНО ВСЁ РАБОТАЕТ И БЕЗ СР (звучит-то как...) Я смог разобраться
Я-то постовую проблему решил. Но наткнулся на новую: (зависимости Лог4Ж2, требует лог менеджера, который уже в зависимостях)
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/logging/log4j/LogManager
at mecha.logic.Exchangelogic.(Exchangelogic.java:13)
at mecha.Main.main(Main.java:32)
Caused by: java.lang.ClassNotFoundException: org.apache.logging.log4j.LogManager
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:527)
Я СМОГ! Я РАЗОБРАЛСЯ!
либо ты пишешь, как ты это сделал, либо тебе пизда
Проблема была в паковании проекта. src/main/java/ И тут пакеты, вместо **/java/GLAVNIY/sub-pakets
Пошли как **/java/paket-1 && **/java/packet-2
И так далее. Понял только после того, как ёбнулся сверять абсолютно всё в двух одинаковых проектах, один из которых рабочий, а второй -- нет. Как отключить "сплющивание" файлов в эклипсе?..
Мне кажется некоторые фичи в современных иде добавляют просто чтобы заебать.
Хоть на пастебин, хоть на гуглодиск файл выложи, но OCR делать малок то станет...
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/logging/log4j/LogManager
at mecha.logic.Exchangelogic.(Exchangelogic.java:13)
at mecha.Main.main(Main.java:32)
Caused by: java.lang.ClassNotFoundException: org.apache.logging.log4j.LogManager
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:527)
The error message you shared indicates that the Java program encountered a `NoClassDefFoundError` when trying to load the class `org.apache.logging.log4j.LogManager`. This error typically occurs when the specified class or one of its dependencies is not found at runtime.
The root cause of the error is that the required class `org.apache.logging.log4j.LogManager` is missing from the classpath. The class is likely part of the Apache Log4j library, which is commonly used for logging in Java applications.
To resolve this issue, you need to ensure that the Apache Log4j library is available in your Java application's classpath. Here are some steps you can take to fix the error:
1. Verify that you have the Apache Log4j library in your project's dependencies. You can download the Log4j library from the Apache Log4j website and add it to your project's build path or use a build tool like Maven or Gradle to manage dependencies.
2. If you are using a build tool like Maven or Gradle, check your project's configuration to ensure that the Log4j library is listed as a dependency in your build file.
3. If you are running your Java application from the command line, make sure that you include the Log4j library in the classpath when executing the program.
For example, if you are using the `java` command to run the program, you can include the classpath using the `-cp` or `-classpath` option:
```bash
java -cp path/to/log4j.jar:. MainClass
```
Replace `path/to/log4j.jar` with the actual path to the Log4j JAR file, and `MainClass` with the name of your main Java class.
Make sure to double-check your project's dependencies, build configuration, and classpath settings to ensure that the Log4j library is correctly included and accessible during runtime. Once you resolve the classpath issue, the `NoClassDefFoundError` should be resolved.
Там явно что то с зависимостями. Чем ты jar файл собираешь, maven?
java -cp texlog-0.0.1-SNAPSHOT.jar:path/to/log4j.jar package.name.MainClass
ну или можешь все джарки скопировать в папку и написать так
java -cp "libs/*" package.name.MainClass
попытай его - может и поможет, что-то в кодинге не почувствовал его отупления
А если это была не шутка, под "кофе машиной" имелась в виду JVM