【问题标题】:Kotlin setup via gradle on eclipseKotlin 在 Eclipse 上通过 gradle 设置
【发布时间】:2017-10-31 03:40:22
【问题描述】:

努力让 Kotlin 在 Eclipse 上运行。

我已经开始了新的 graddle 项目。添加了 kotlin 网站上规定的依赖项。

构建过程没有错误。

我在 src/java/main 下创建了“main.kt”文件:

fun main(args: Array<String>) {
    println("foo")
}

但是,我有两个问题: 1. 来自 kotlin 的任何东西,例如println 突出显示为“未解决的参考”。 2. 我无法运行程序-Error: Could not find or load main class MainKt(右键main.kr run as 'kotlin application')

如果我创建“新的 kotlin 项目”,一切正常。

我的 graddle 构建脚本:

plugins {
    id "org.jetbrains.kotlin.jvm" version "1.1.2-2"
}

repositories {

    jcenter()

    mavenCentral()
}


dependencies {

    //api 'org.apache.commons:commons-math3:3.6.1'


    implementation 'com.google.guava:guava:21.0'


    testImplementation 'junit:junit:4.12'

    compile "org.jetbrains.kotlin:kotlin-stdlib:1.1.2-2"
    compile "org.jetbrains.kotlin:kotlin-stdlib-jre8"

    compile "org.jetbrains.kotlin:kotlin-reflect"
    testCompile "org.jetbrains.kotlin:kotlin-test"
    testCompile "org.jetbrains.kotlin:kotlin-test-junit"

}

sourceSets {
    main.java.srcDirs = ['src/main/java']
    main.kotlin.srcDirs = ['src/main/java', 'src/main/kotlin']
    main.resources.srcDirs = ['src/main/resources']
}

我做错了什么?

如果有帮助的话,我的 Java 知识为零,所以我可能犯了一些小错误。

更新:

安装了一个 Spring 插件并通过它生成了一个新的 Web 应用程序,包括 gradle。 但 Kotlin 的行为也出人意料。

起初我无法以run as Kotlin application 的身份运行它,并且错误为main 找不到,但有时它会立即运行并崩溃。在我删除和编辑类后,它开始启动并崩溃,尝试在其他包下创建它,删除和添加 Kotlin(我无法重现序列以使其再次工作)。

有趣的部分是 gradle boot build 启动一切并且一切正常,它以某种方式找到了 Kotlin 的主要部分。

Kotlin 插件本身可能存在一些问题(它的负载可能取决于某些events 并不总是触发)

【问题讨论】:

  • 您提到您“在 src/java/main 下创建了 'main.kt' 文件” - 我不知道这是否是一个错字,但它应该在 'src/main/java 下'
  • 是的,这是一个错字,它在src/main/java下
  • 在命令行上运行./gradlew build 有效吗?
  • 你有没有得到这个工作?我有同样的问题。
  • 我已经放弃了 eclipse 并使用了 Kotlin 的想法。

标签: eclipse gradle kotlin


【解决方案1】:

将以下内容添加到您的配置中:

apply plugin: 'eclipse'
eclipse {
    classpath {
        containers 'org.jetbrains.kotlin.core.KOTLIN_CONTAINER'
    }
}

请参阅https://gitlab.com/frnck/kotlin-gradle-eclipse 了解工作配置。

【讨论】:

  • 这是正确答案。不知道为什么这是-1,除了可能是反动的mod。发布的 URL 只是一个完整的示例,它最终对我很有帮助……至少对我来说
【解决方案2】:

我想补充 frnck 答案,这只是解决方案的一部分。我还必须添加这些行:

eclipse.project {
    buildCommand 'org.jetbrains.kotlin.ui.kotlinBuilder'
    natures 'org.jetbrains.kotlin.core.kotlinNature'
    natures 'org.eclipse.jdt.core.javanature'
    linkedResource name: 'kotlin_bin', type: '2', locationUri: 'org.jetbrains.kotlin.core.filesystem:/aio/kotlin_bin'
}

【讨论】:

    【解决方案3】:

    对于 Eclipse 2018-12 和 kotlin 1.3,解决方案是其他答案加上一些额外设置文件的组合:

    eclipse {
        classpath {
            //Adds the kotlin container to the classpath
            containers 'org.jetbrains.kotlin.core.KOTLIN_CONTAINER'
            //Fixes the right output path
            defaultOutputDir = file('bin')
            //Make all src folders output in the same output folder (default)
            file {
                whenMerged { 
                    // use default Output for all source-folders. see also defaultOutputDir per project
                    entries.each { source ->
                        // only Source-folders in the project starting with '/' are project-references
                        if (source.kind == 'src' && !source.path.startsWith('/')) { 
                            source.output = null
                        }
                    }
                }
            }
        }
    
    
        project{
            buildCommand 'org.jetbrains.kotlin.ui.kotlinBuilder'
            //Fixes the natures
            natures 'org.jetbrains.kotlin.core.kotlinNature'
            natures 'org.eclipse.jdt.core.javanature'
            //Links the kotlin_bin folder (generated class files)
            linkedResource name: 'kotlin_bin', type: '2', locationUri: "org.jetbrains.kotlin.core.filesystem:/${project.name}/kotlin_bin".toString()
            file{
                whenMerged{
    
                    def kotlinPrefs = file('.settings/org.jetbrains.kotlin.core.prefs')
                    def jdkHome = System.properties.'java.home'
                    if(!(jdkHome)){
                        throw new GradleException('No JDK home available for setting up Eclipse Kotlin plugin, setup env "java.home" or update this script.')
                    }
                    kotlinPrefs.write """\
                        codeStyle/codeStyleId=KOTLIN_OFFICIAL
                        codeStyle/globalsOverridden=true
                        compilerPlugins/jpa/active=true
                        compilerPlugins/no-arg/active=true
                        compilerPlugins/spring/active=true
                        eclipse.preferences.version=1
                        globalsOverridden=true
                        jdkHome=$jdkHome
                    """.stripIndent()
                }
            }
        }
    }
    

    【讨论】:

      【解决方案4】:

      我想在 Felipe Nascimento 的回答中添加 .settings 文件夹的位置尚不存在。将下面的行插入该答案时,它会起作用。

      def kotlinPrefs = file("../${project.name}/.settings/org.jetbrains.kotlin.core.prefs".toString())
      

      【讨论】:

      • 另外:对于 Windows,将 jdkHome=$jdkHome 替换为 jdkHome=${jdkHome.replaceAll("\\\\", "/") } 以允许正确显示反斜杠。
      • Michiel Leegwater 除非绝对需要反斜杠,否则我只在 Windows 上使用 /。总的来说,/ 在 Windows 中工作得很好,除了 UNC 路径和控制台中的完成等一些事情。
      【解决方案5】:

      我发现您运行此任务时设置的 JAVA_HOME 环境变量;

      gradle cleanEclipse eclipse
      

      是包含在 Eclipse BuildPath 中的那个

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-18
        • 1970-01-01
        相关资源
        最近更新 更多