2017-11-11 217 views
1

我试图用gradlew来运行gradle。我的文件夹结构如下所示:java 1.8 - 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"); 
    } 

} 
+0

您能向我们展示您的主类(Greeting.java)源代码吗? – adarshr

+0

我怀疑你的java构建路径。杰尔没有认出你的主班。 ? –

+0

@adarshr我更新了我的问题以显示主要课程。 – wedran

回答

0

您的包装不正确。将其更改为package hello;,它将起作用。

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

+0

你能更具体吗? – wedran

+0

@wedran更新了我的答案。 – adarshr

+0

你的意思是把package main.java.hello改成只打包hello?因为如果我这样做,那么这发生在我在IDE中运行时:错误:无法找到或加载主类main.java.hello.Greeting – wedran

0

在Java文件中删除从包定义主要还是 删除您的不一致SourceSet定义或将其更改为

sourceSets { 
    main { 
    java { 
     exclude 'some/unwanted/package/**' 
    } 
    } 
} 
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' 
    

    ,如果我们要添加一些文件夹到包裹。

    +0

    这是错误的。你只需要解决我的答案中解释的包名。 – adarshr