繁体   English   中英

Java 1.8-Gradle找不到主类

[英]java 1.8 - gradle can't find main class

我正在尝试使用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构建,但是./gradlew运行退出:

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

Greeting.java只是一个具有主要方法的简单类:

package main.java.hello;


public class Greeting {

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

}

您的包裹不正确。 更改为package hello; 它会工作。

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

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

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

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

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'
    

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

    暂无
    暂无

    声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

     
    粤ICP备18138465号  © 2020-2024 STACKOOM.COM