Gradle - Не удалось найти или загрузить основной класс
Я пытаюсь запустить очень простой проект с использованием Gradle и запуская следующую ошибку при использовании gradlew run command
:
could not find or load main class 'hello.HelloWorld'
Вот моя файловая структура:
SpringTest
-src
-hello
-HelloWorld.java
-Greeter.java
-build
-libs
-tmp
-gradle
-wrapper
-build.gradle
-gradlew
-gradlew.bat
Я исключил содержимое папок libs и tmp, потому что не думал, что это будет релевантная информация для этой проблемы, но я могу добавить его, если потребуется.
Вот мой файл build.gradle:
apply plugin: 'java'
apply plugin: 'application'
apply plugin: 'eclipse'
mainClassName = 'hello/HelloWorld'
repositories {
mavenLocal()
mavenCentral()
}
dependencies {
compile "joda-time:joda-time:2.2"
}
jar {
baseName = "gs-gradle"
version = "0.1.0"
}
task wrapper(type: Wrapper) {
gradleVersion = '1.11'
}
Любая идея о том, как исправить эту проблему? Я пробовал всевозможные вещи для атрибута mainClassName, но ничего не работает.
Ответы
Ответ 1
Здесь я вижу две проблемы: одна с sourceSet
другая с mainClassName
.
-
Либо переместите исходные файлы Java в src/main/java
а не просто в src
. Или правильно установите sourceSet
, добавив в build.gradle следующее.
sourceSets.main.java.srcDirs = ['src']
-
mainClassName
должно быть полностью определенным именем класса, а не путем.
mainClassName = "hello.HelloWorld"
Ответ 2
Измените build.gradle, чтобы разместить свой основной класс в манифесте:
jar {
manifest {
attributes 'Implementation-Title': 'Gradle Quickstart',
'Implementation-Version': version,
'Main-Class': 'hello.helloWorld'
}
}
Ответ 3
Я просто столкнулся с этой проблемой и решил отладить ее сам, так как я не мог найти решение в Интернете.
Все, что я сделал, это изменить mainClassName на весь путь (с правильными подкаталогами в проекте c)
mainClassName = 'main.java.hello.HelloWorld'
Я знаю, что прошло почти год с тех пор, как сообщение было сделано, но я думаю, что кто-то найдет эту информацию полезной.
Счастливое кодирование.
Ответ 4
Просто, чтобы дать понять, что новички пытаются запустить проект gradle от Netbeans:
Чтобы понять это, вам нужно посмотреть, как выглядит основное имя класса и, как выглядит построение gradle:
Основной класс:
package com.stormtrident;
public class StormTrident {
public static void main(String[] cmdArgs) {
}
}
Обратите внимание, что это часть пакета "com.stormtrident".
Gradle build:
apply plugin: 'java'
defaultTasks 'jar'
jar {
from {
(configurations.runtime).collect {
it.isDirectory() ? it : zipTree(it)
}
}
manifest {
attributes 'Main-Class': 'com.stormtrident.StormTrident'
}
}
sourceCompatibility = '1.8'
[compileJava, compileTestJava]*.options*.encoding = 'UTF-8'
if (!hasProperty('mainClass')) {
ext.mainClass = 'com.stormtrident.StormTrident'
}
repositories {
mavenCentral()
}
dependencies {
//---apache storm
compile 'org.apache.storm:storm-core:1.0.0' //compile
testCompile group: 'junit', name: 'junit', version: '4.10'
}
Ответ 5
Борьба с той же проблемой в течение некоторого времени. Но после создания структуры каталогов src/main/java и установки источника (из верхней части пакета) он работал, как ожидалось.
учебник Я пробовал. После выполнения gradle build
вам нужно будет найти classes
в каталоге build
.
Ответ 6
В моем build.gradle я решил эту проблему, создав задачу, а затем указав "mainClassName" следующим образом:
task(runSimpleXYZProgram, group: 'algorithms', description: 'Description of what your program does', dependsOn: 'classes', type: JavaExec) {
mainClassName = 'your.entire.package.classContainingYourMainMethod'
}
Ответ 7
Я решил это, добавив приведенный ниже код в мое приложение.
//введите код, это ошибка, которую я получал при запуске build.gradle. имя основного класса не настроено и не может быть разрешено
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
Ответ 8
Я исправил это, выполнив очистку с помощью gradle build (или удалив папку сборки gradle mannually)
Это происходит, если вы переместите основной класс в новый пакет, а старый основной класс по-прежнему ссылается на claspath
Ответ 9
Когда у меня была эта ошибка, это было потому, что у меня не было моего класса в пакете. Поместите ваш файл HelloWorld.java
в папку "package". Возможно, вам придется создать новую папку пакета:
Щелкните правой кнопкой мыши по папке hello
и выберите "Создать" > "Пакет". Затем дайте ему имя (например, com.example) и переместите класс HelloWorld.java
в пакет.
Ответ 10
-
проверьте, правильно ли определен gradle.properties JAVA_HOVE
org.gradle.java.home = C:\Program Files (x86)\Java\jdk1.8.0_181
или же
- если он не определен, убедитесь, что Eclipse знает JDK, а не JRE
![enter image description here]()
Ответ 11
Если вы решили написать свой класс hello.World
в Kotlin, другая проблема может заключаться в том, что вы должны ссылаться на него как mainClassName = "hello.WorldKt"
.
SRC/главная /Java/привет/World.kt:
package hello
fun main(args: Array<String>) {
...
}
// class World {} // this line is not necessary
Ответ 12
Для структуры проекта, такой как
project_name/src/main/java/Main_File.class
в файле build.gradle
добавьте следующую строку
mainClassName = 'Main_File'