2015-11-16 40 views
17

Tôi cố gắng để sử dụng Kotlin với gradle, nhưng tôi không thể thành công tạo ra một dự án với IntelliJ IDEA 15.Cấu hình Gradle với Kotlin

Tôi đã tạo ra dự án đơn giản với hai mô-đun hello-javahello-kotlin.

hello-java là dự án java đơn giản và nó đang biên dịch và chạy hoàn toàn tốt.

hello-kotlin là mô-đun kotin đơn giản, chỉ với một tệp * .kt và build.gradle tệp.
Dưới đây là các nguồn:

build.gradle

group 'pl.fzymek.kotlin' 
version '1.0-SNAPSHOT' 

buildscript { 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:0.10.4" 
    } 
} 

apply plugin: 'kotlin' 
apply plugin: 'application' 

mainClassName = 'HelloKotlinKt' 

repositories { 
    mavenCentral() 
} 

jar { 
    manifest { 
     attributes 'Main-Class': mainClassName 
    } 
} 

dependencies { 
    compile "org.jetbrains.kotlin:kotlin-stdlib:0.10.4" 
} 

HelloKotlin.kt

fun main(args: Array<String>) { 
    println("Hello, Kotlin!") 
} 

mô-đun settings.gradle chính

include 'hello-java' 
include 'hello-kotlin' 

Khi chạy gradlew clean build tất cả các dự án được biên soạn thành công, nhưng khi chạy java -jar hello-kotlin-1.0-SNAPSHOT.jar tôi nhận được lỗi sau:

Exception in thread "main" java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics 
     at HelloKotlinKt.main(HelloKotlin.kt) 
Caused by: java.lang.ClassNotFoundException: kotlin.jvm.internal.Intrinsics 
     at java.net.URLClassLoader.findClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
     ... 1 more 

Hơn thế nữa, Intellij dường như không nhận ra src/main/kotlin thư mục như thư mục nguồn (nó không được đánh dấu màu xanh lam) và tôi không thể sử dụng tính năng tự động hoàn tất khi chỉnh sửa HelloKotlin.kt tập tin.

Dưới đây là cấu trúc dự án của tôi trong cửa sổ dự án Intellij

enter image description here

Tôi đã thử sử dụng tùy chọn Intellij để cấu hình mô-đun với Kotlin (Tools->Kotlin->Configure project with Kotlin), nhưng nó mang lại cho tôi lỗi rằng "Tất cả các mô-đun với file Kotlin là được định cấu hình "

Giúp tôi lưu trữ stackoverflow, bạn là trợ giúp duy nhất của tôi.

+1

Tại sao bạn đang sử dụng Kotlin 0,10? phiên bản mới nhất là 1.0-beta. – yole

+0

Không có lý do đặc biệt. tôi đã thử các phiên bản khác nhau. tôi nghĩ vấn đề của tôi có một cái gì đó để làm w phiên bản kotlin thứ i. –

+0

Vâng, stacktrace bạn đã hiển thị có chứa một lớp mà không còn tồn tại trong phiên bản Kotlin mới nhất, do đó, có, nó có cái gì để làm với phiên bản Kotlin. Vui lòng luôn sử dụng phiên bản mới nhất. – yole

Trả lời

4

Tại sao ứng dụng của tôi không chạy?

Bình bạn đang tạo không bao gồm thời gian chạy kotlin vì Gradle sẽ chỉ tạo một Jar với các tệp lớp học của bạn trong đó. Tôi thấy bạn đang sử dụng plugin application để thực hiện $ gradle run hoặc tạo phân phối và thực thi thông qua tập lệnh trình bao được cung cấp sẽ hoạt động tốt. Nếu bạn muốn tàu kotlin với Jar của bạn, bạn sẽ cần phải tạo ra một lọ chất béo.

Tại sao IDEA không nhận ra thư mục nguồn?

Tôi nghi ngờ điều này là do thực tế là bạn chưa áp dụng plugin idea trong tệp xây dựng của mình. Tôi đã không làm bất kỳ công việc với Kotlin, nhưng với các ngôn ngữ khác, điều này là cần thiết để thiết lập không gian làm việc một cách chính xác.

+0

Tôi vừa thử áp dụng plugin 'idea', nhưng dường như nó không có hiệu lực. Tôi đã xây dựng lại dự án và thậm chí khởi động lại IDE nhưng không có gì thay đổi. –

+0

Bạn đang nhập/xây dựng dự án của mình như thế nào? – tddmonkey

+0

Tôi đã lấy tệp 'build.gradle' của bạn, áp dụng plugin ý tưởng, chạy' $ gradle idea' và dự án kết quả có 'src/main/kotlin' được đánh dấu là thư mục nguồn – tddmonkey

11

When running gradlew clean build all projects are compiled successfully, but when running java -jar hello-kotlin-1.0-SNAPSHOT.jar I get following error...

jar { 
    manifest { 
     attributes 'Main-Class': 'HelloKotlinKt' 
    } 

    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } 
} 

What is more, Intellij seems not to recognize src/main/kotlin directory as source directory (it's not marked in blue)...

sourceSets { 
    main.java.srcDirs += 'src/main/kotlin' 
} 

Tài liệu và tài nguyên hữu ích có thể được tìm thấy herethere.

+0

Theo doc, 'sourceSets' nên được cập nhật khi không sử dụng cấu trúc dir mặc định, nhưng đây không phải là trường hợp của tôi. Tôi đang sử dụng mặc định một vì vậy tôi nghĩ rằng điều này không có ý nghĩa để thêm nó trong 'build.gradle' –

+1

thuộc tính Main-Class trong câu trả lời của bạn sẽ không hoạt động vì Kotlin sẽ không tạo ra một lớp có tên 'HelloKotlin.kt'. Tên chính xác là 'HelloKotlinKt'. –

+0

@AlexanderUdalov bạn hoàn toàn đúng, cảm ơn bạn đã bình luận. :) – aga

0

Tôi chỉ làm tài liệu đó nói và mọi việc đều ổn. "nguồn Kotlin có thể được trộn với nguồn Java trong cùng một thư mục, hoặc trong các thư mục khác nhau Quy ước mặc định được sử dụng thư mục khác nhau:.

project 
    - src 
     - main (root) 
      - kotlin 
      - java 

Thuộc tính sourceSets tương ứng sẽ được cập nhật nếu không sử dụng các quy ước mặc định:

sourceSets { 
    main.kotlin.srcDirs += 'src/main/myKotlin' 
    main.java.srcDirs += 'src/main/myJava' 
} 

Hy vọng nó sẽ giúp cho bạn.

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