#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 Спасибо, что дали мне знать, что я думаю, что мне чего-то не хватает, Когда я увидел проблему, я допустил ошибку, потому что хотел ее исправить.