2014-07-24 48 views
30

Tôi đang cố gắng để chạy một dự án rất đơn giản sử dụng Gradle và chạy vào các lỗi sau khi sử dụng gradlew run command:Gradle - Không thể tìm thấy hoặc nạp lớp học chính

could not find or load main class 'hello.HelloWorld'

Dưới đây là cấu trúc tập tin của tôi:

SpringTest 
    -src 
     -hello 
      -HelloWorld.java 
      -Greeter.java 
    -build 
     -libs 
     -tmp 
    -gradle 
     -wrapper 
    -build.gradle 
    -gradlew 
    -gradlew.bat 

Tôi đã loại trừ nội dung của thư mục libs và tmp vì tôi không nghĩ đó là thông tin liên quan cho vấn đề này, nhưng tôi có thể thêm thông tin đó nếu cần.

Đây là tập tin build.gradle tôi:

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

mainClassName = 'hello/HelloWorld' 

repositories { 
    mavenLocal() 
    mavenCentral() 
} 

dependencies { 
    compile "joda-time:joda-time:2.2" 
} 

jar { 
    baseName = "gs-gradle" 
    version = "0.1.0" 
} 

task wrapper(type: Wrapper) { 
    gradleVersion = '1.11' 
} 

Bất kỳ ý tưởng về làm thế nào để khắc phục vấn đề này? Tôi đã thử tất cả mọi thứ cho thuộc tính mainClassName nhưng dường như không có gì hoạt động.

Trả lời

39

Tôi thấy hai vấn đề ở đây, một vấn đề với sourceSet một vấn đề khác với mainClassName.

  1. Hoặc di chuyển tệp nguồn java sang src/main/java thay vì chỉ src. Hoặc thiết lập sourceSet đúng

    sourceSets.main.java.srcDirs = ['src'] 
    
  2. mainClassName nên tên lớp đầy đủ, không phải con đường.

    mainClassName = "hello.HelloWorld" 
    
+0

Tôi thay đổi sourceSets ở đâu? Trong tệp build.gradle của tôi? Hoặc là có một tập tin cấu hình mà tôi cần phải thay đổi? – Tylerlee12

+1

có, trong tệp 'build.gradle' của bạn. – kunal

12

Tôi chỉ chạy vào vấn đề này và quyết định để gỡ lỗi nó bản thân mình kể từ khi tôi không thể tìm thấy một giải pháp trên internet. Tất cả tôi đã làm là thay đổi mainClassName để nó toàn bộ đường dẫn (với các thư mục con đúng trong OFC dự án)

mainClassName = 'main.java.hello.HelloWorld' 

Tôi biết nó được gần một năm kể từ khi bài đã được thực hiện, nhưng tôi nghĩ rằng ai đó sẽ tìm thấy điều này thông tin hữu ích.

Mã hóa vui vẻ.

16

Sửa build.gradle để đưa lớp học chính của bạn trong biểu hiện:

jar { 
    manifest { 
     attributes 'Implementation-Title': 'Gradle Quickstart', 
        'Implementation-Version': version, 
        'Main-Class': 'hello.helloWorld' 
    } 
} 
+0

Câu trả lời hay nhất IMHO. – rekire

1

phải vật lộn với vấn đề tương tự trong một thời gian. Nhưng sau khi tạo cấu trúc thư mục src/main/java và đặt nguồn (từ đầu gói), nó hoạt động như mong đợi.

tutorial Tôi đã thử với. Sau khi bạn thực hiện gradle build, bạn sẽ phải tìm thấy classes trong thư mục build.

+0

Ngoài ra, vì không có ai khác chỉ định nó: tệp 'build.gradle' phải được đặt" cùng với "thư mục' src/', không cùng với tệp .java trong' src/main/java/hello/' – joakimk

1

Trong bản dựng của tôi.gradle, tôi giải quyết vấn đề này bằng cách tạo ra một nhiệm vụ và sau đó xác định "mainClassName" như sau:

task(runSimpleXYZProgram, group: 'algorithms', description: 'Description of what your program does', dependsOn: 'classes', type: JavaExec) { 
    mainClassName = 'your.entire.package.classContainingYourMainMethod' 
} 
2

Chỉ cần để làm cho nó rõ ràng cho người mới cố gắng để chạy một dự án gradle từ Netbeans:
Để hiểu điều này, bạn cần phải xem những gì tên lớp chính trông giống như gì gradle build trông giống như:

lớp chính:

package com.stormtrident; 

public class StormTrident { 
    public static void main(String[] cmdArgs) { 
    } 
} 

Chú ý rằng nó là một phần của gói "com.stormtrident".

Gradle xây dựng:

apply plugin: 'java' 

defaultTasks 'jar' 

jar { 
from { 
     (configurations.runtime).collect { 
      it.isDirectory() ? it : zipTree(it) 
     } 
    }  
    manifest { 
     attributes 'Main-Class': 'com.stormtrident.StormTrident' 
    } 
} 


sourceCompatibility = '1.8' 
[compileJava, compileTestJava]*.options*.encoding = 'UTF-8' 

if (!hasProperty('mainClass')) { 
    ext.mainClass = 'com.stormtrident.StormTrident' 
} 

repositories { 
    mavenCentral() 
} 

dependencies { 
    //---apache storm 
    compile 'org.apache.storm:storm-core:1.0.0' //compile 
    testCompile group: 'junit', name: 'junit', version: '4.10' 
} 
+1

Đối với tôi, việc thêm jar {manifest {attributes}} đã giúp bạn. Cảm ơn! – Paul

0

tôi cố định này bằng cách chạy sạch bởi gradle xây dựng (hoặc xóa gradle xây dựng thư mục mannually)

này xảy ra nếu bạn di chuyển các lớp học chính để một gói mới và lớp chính cũ vẫn được tham chiếu trong claspath

0

Khi tôi gặp lỗi này, đó là vì Tôi không có lớp học của mình trong gói. Đặt tệp HelloWorld.java của bạn vào thư mục "gói". Bạn có thể phải tạo thư mục gói mới:

Nhấp chuột phải vào thư mục hello và chọn "Mới"> "Gói". Sau đó đặt tên cho nó (ví dụ: com.example) và di chuyển lớp HelloWorld.java của bạn vào gói.

Các vấn đề liên quan