gradle在没有sourceset的情况下成功构建,但在sourceset的情况下失败,error cannot find symbol

g0czyy6m  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(353)

我有一个非常简单的helloworld程序,如果我不使用gradlesourceset,它就可以工作,但是如果我使用gradlesourceset,它就会失败。我不明白为什么。请帮忙。
使用gradle 6.6.1-bin。我自己手动安装的,只是为了确保它是兼容的。
问题是,如果我将build.gradle文件和helloworld.java文件放在同一个基本目录中,那么一切都会成功编译和构建。命令示例:

gradle clean build

helloworld.java文件:

package hello;

import org.joda.time.LocalTime;

public class HelloWorld {
  public static void main(String[] args) {
    LocalTime currentTime = new LocalTime();
    System.out.println("The current local time is: " + currentTime);

    Greeter greeter = new Greeter();
    System.out.println(greeter.sayHello());
  }
}

不带sourceset的build.gradle:

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'application'

mainClassName = 'hello.HelloWorld'

repositories {
    mavenCentral()
}

jar {
    archiveBaseName = 'gs-gradle'
    archiveVersion =  '0.1.0'
}

sourceCompatibility = 1.8
targetCompatibility = 1.8

dependencies {
    implementation "joda-time:joda-time:2.2"
    testImplementation "junit:junit:4.12"
}

但是,如果我尝试将源文件移动到文件夹布局(正如gradle指南所建议的那样,这是他们的标准)并添加一个sourceset,则会失败。
文件夹布局如下:
/opt/myproject/src/main/java/helloworld.java
/opt/myproject/build.gradle选项
使用sourceset修改了build.gradle:

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'application'

sourceSets {
    main {
        java {
            srcDir 'src'
        }
    }
}

mainClassName = 'hello.HelloWorld'

repositories {
    mavenCentral()
}

jar {
    archiveBaseName = 'gs-gradle'
    archiveVersion =  '0.1.0'
}

sourceCompatibility = 1.8
targetCompatibility = 1.8

dependencies {
    implementation "joda-time:joda-time:2.2"
    testImplementation "junit:junit:4.12"
}

现在运行此操作失败:

gradle clean build

控制台输出:

> Task :compileJava FAILED
/opt/myProject/src/main/java/HelloWorld.java:10: error: cannot find symbol
    Greeter greeter = new Greeter();
    ^
  symbol:   class Greeter
  location: class HelloWorld
/opt/myProject/src/main/java/HelloWorld.java:10: error: cannot find symbol
    Greeter greeter = new Greeter();
                          ^
  symbol:   class Greeter
  location: class HelloWorld
2 errors

FAILURE: Build failed with an exception.

我不知道为什么这是失败的工作。

e7arh2l6

e7arh2l61#

正如@m.ricciuti指出的,我只需要从第二个build.gradle脚本中删除sourcesets块。默认情况下,gradle将使用src/main/java作为主sourceset的基本目录,而不需要显式声明它(我对此一无所知。)

相关问题