Gradle: «Ошибка: Не удалось найти или загрузить основной класс Main». Не удается запустить файл после сборки через Gradle

#java #gradle #build #jar #manifest

Вопрос:

Переполнение стека

Столкнулся с проблемой при создании java-приложения с помощью Gradle. После создания файла jar, при попытке запустить его с помощью

 java -jar ZoneNewsDiscordBot-1.0-SNAPSHOT.jar  

получил это в терминале

 Error: Could not find or load main class Main  

Иерархия моего файла проекта

 - ... - .idea - build  - classes  - java  - main  - Main.class  - NewsGenerator.class  - Resources.class  - libs  - ZoneNewsDiscordBot-1.0-SNAPSHOT.jar  - resources  - main  - META-INF  MANIFEST.MF  - application.properties  - tmp  - compileJava  - jar   - MANIFEST.MF - gradle - img - input - out - src  - main  - java  - Main.java  - NewsGenerator.java  - Resources.java - build.gradle - gradlew - gradlew.bat - ...  

сборка.сортировка

 plugins {  id 'java' }   jar {  manifest {  attributes(  'Main-Class': "Main"  )  } }   group 'com.ZoneNewsDiscordBot' version '1.0-SNAPSHOT'   sourceCompatibility = 1.8   repositories {  mavenCentral()  jcenter() }   dependencies {  implementation "joda-time:joda-time:2.2"  testCompile group: 'junit', name: 'junit', version: '4.12'  compile 'net.dv8tion:JDA:4.2.0_214'    //for JSON parsing  compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.11.3'  compile group: 'com.fasterxml.jackson.core', name: 'jackson-core', version: '2.11.3'  compile group: 'com.fasterxml.jackson.core', name: 'jackson-annotations', version: '2.11.3'      //for uploading pictures from Web Page  compile group: 'net.sourceforge.htmlunit', name: 'htmlunit', version: '2.45.0'    //for working with Instagram  compile group: 'com.restfb', name: 'restfb', version: '3.13.0'  implementation 'com.github.instagram4j:instagram4j:2.0.3'  compile group: 'org.brunocvcunha.instagram4j', name: 'instagram4j', version: '1.14'    task stage(dependsOn: ['build', 'clean'])  build.mustRunAfter clean }  

Я попытался проверить MANIFEST.MF и получил это
МАНИФЕСТ.МФ

 Manifest-Version: 1.0 Main-Class: Main  

Встроенный JAR-файл ( ZoneNewsDiscordBot-1.0-SNAPSHOT.jar ) содержит следующие файлы:

 - META-INF (folder)  - MANIFEST.MF - application.properties - Main.class - NewsGenerator.class - Resourses$1.class - Resourses.class - Test.class   

Test.class это мой временный класс для некоторых тестовых заданий, я не думаю, что проблема в нем.

Я не могу понять, в чем проблема. Я написал правильные пути… Почему он не может найти основной класс?

Комментарии:

1. JAR содержит файл MANIFEST.MF (как в моем посте) и все скомпилированные файлы .class в корневом каталоге

2. пытался java -cp ZoneNewsDiscordBot-1.0-SNAPSHOT.jar Main . у меня та же проблема Error: Could not find or load main class Main

3. файлы в JAR: папка META-INF (содержит MANIFEST.MF , как в моем посте); applications.properties , Main.class , NewsGenerator.class , Resources$1.class , Resourses.class , Test.class (мой временный класс для некоторых тестовых вещей, я не думаю, что проблема в нем)

4. когда я попытался использовать javap терминал, он сказал мне, что не знает javap -команда. то же самое с javac -командой, кстати

5. Нет-нет-нет. В папке META-INF находится только MANIFEST.MF файл. applications.properties , Main.class , NewsGenerator.class , Resources$1.class , Resourses.class , Test.class находится в КОРНЕ

Ответ №1:

я решил это так

Это происходит из-за того, что имя класса, включая имя пакета, не записано в записи mainClassName файла build.gradle.

БЫВШИЙ)

1.

 package example.sphinx;   public class ExampleMain {   }  
 plugin : 'java'   mainClassName = 'example.sphinx.ExampleClass'  

2.Добавление приложения

 plugins {  id 'java'  id 'application' }  

Комментарии:

1. Я вставляю его в build.gradle, как mainClassName = 'Main' и сейчас, И теперь я не могу собрать jar, Получил это в терминале BUILD FAILED in 0s Could not set unknown property 'mainClassName' for root project 'ZoneNewsDiscordBot' of type org.gradle.api.Project.

2. попробуйте добавить плагин приложения

3. Добавлено application plugins . JAR успешно строится. Но когда я пытаюсь запустить его, java -jar lt;file_namegt;.jar возникает та же проблема Error: Could not find or load main class Main

4. Переменная %JAVA_HOME%lib;. пути к классу иногда меняет ее, это также может быть вызвано проблемой с переменной среды.

5. @user16320675 Спасибо, что дали мне знать, что я думаю, что мне чего-то не хватает, Когда я увидел проблему, я допустил ошибку, потому что хотел ее исправить.