2017-11-11 242 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