java 1.8 - gradle无法找到主类

时间:2017-11-11 16:53:52

标签: java class gradle build.gradle gradlew

我试图用gradlew运行gradle构建。我的文件夹结构如下所示:

src
└── main
    └── java
        └── hello
            └── Greeting.java

这是我的build.gradle

    buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:1.5.8.RELEASE")
    }
}

apply plugin: 'java'
apply plugin: 'application'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'

mainClassName = 'hello.Greeting'
sourceSets.main.java.srcDirs = ['src']


jar {
    baseName = 'gs-rest-service'
    version =  '0.1.0'
}

repositories {
    mavenCentral()
}

sourceCompatibility = 1.8
targetCompatibility = 1.8

dependencies {
    compile("org.springframework.boot:spring-boot-starter-web")
    testCompile('org.springframework.boot:spring-boot-starter-test')
}

我可以成功运行./gradlew build,但./gradlew运行退出:

 Task :run
 Error: Could not find or load main class hello.Greeting

Greeting.java只是一个带有main方法的简单类:

package main.java.hello;


public class Greeting {

    public static void main(String[] args) {
        System.out.println("greet");
    }

}

3 个答案:

答案 0 :(得分:0)

您的包裹不正确。将其更改为package hello;即可。

src/main/java是源文件夹,它不是包的一部分。

答案 1 :(得分:0)

从java文件中的包定义中删除main或 删除不一致的SourceSet定义或将其更改为

sourceSets {
   main {
     java {
       exclude 'some/unwanted/package/**'
     }
   }
 }

答案 2 :(得分:0)

我更改了目录结构,但如果应用以下规则则不需要这样做。

src
└── hello
    └── main
        └── java
            └── Greeting.java

  • 需要指定正确的sourceSet结构
  • sourceSets {
        hello{
            main {
                java {
                    srcDir 'src/hello/main/java'
                }
            }
        }
    }
    

    请注意,路径必须与源集结构相同。

    定义主类名:

  • 必须引用其中一个源集
  • mainClassName='hello.main.java.Greeting'
    

    但也可以是:

    mainClassName='hello.main.java.x.y.Greeting'
    

    ,如果我们希望在包中添加一些文件夹。