Подтвердить что ты не робот

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, но ничего не работает.

4b9b3361

Ответ 1

Здесь я вижу две проблемы: одна с sourceSet другая с mainClassName.

  1. Либо переместите исходные файлы Java в src/main/java а не просто в src. Или правильно установите sourceSet, добавив в build.gradle следующее.

    sourceSets.main.java.srcDirs = ['src']
    
  2. 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

  1. проверьте, правильно ли определен gradle.properties JAVA_HOVE

    org.gradle.java.home = C:\Program Files (x86)\Java\jdk1.8.0_181

или же

  1. если он не определен, убедитесь, что 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'