Tag: intellij idea

与Android和桌面项目共享一个Kotlin模块

我有一个使用LibGDX游戏框架的游戏。 目前我所针对的平台是Desktop(PC,Mac,Linux),通过独立于平台的jar和Android。 该项目托管在https://github.com/NoxHarmonium/project-whiplash如果您需要,请随时查看。 大部分代码位于一个名为core的模块中,完全由Kotlin编写。 该模块已链接到桌面和Android项目中。 这适用于Android版本7.1+和桌面。 对于所有其他版本的Android,我在匿名函数上得到一堆java.lang.NoClassDefFoundErrorexception: val objectObservable = this.observableCache.computeIfAbsent(assetRef, fun(assetRef: AssetRef): Observable { return Async.start(fun(): T { … }).observeOn(this.eventLoopScheduler) }) exception示例: java.lang.NoClassDefFoundError: com.projectwhiplash.utils.assets.LibGdxDataManager$objectMapFromYaml$objectMapObservable$1 这似乎是由于Kotlin默认的目标(1.8)与旧版Android支持的JVM级别(1.6)不兼容。 我可能是错的,但这解释了为什么最新版本的Android工作,因为它支持更高版本的JVM。 解决方案应该像强制Kotlin发射1.6版本的JVM字节码一样简单,但我似乎无法解决。 如果你直接将Kotlin编译成Android,这似乎是通过使用kotlin-android Gradle插件来处理的。 不幸的是,我不能使用这个插件的核心模块,因为它不应该有任何Android的依赖。 我尝试使用https://kotlinlang.org/docs/reference/using-gradle.html#compiler-options中提到的构建设置来覆盖JVM版本,如下所示: compileKotlin { kotlinOptions { jvmTarget = “1.6” } } 然而,无论我把哪个Gradle文件放进去,它似乎都不起作用。事实上,当我尝试使用Intellij时,显示出“Can not resolve symbol’kotlinOptions’”错误。 Kotlin团队可能已经改变了一些东西,文档还没有更新。 我可以在Intellij模块设置中手动覆盖Kotlin设置,但每次同步gradle项目时都会覆盖Kotlin设置,这不是一个好的长期解决方案。 该项目旨在独立于IDE。 有谁知道如何设置核心模块,以最大限度地兼容老版本的Android? 我目前有最低的API级别设置为9,因为这是目前的LibGDX默认,但我愿意设置这个更高,如果太难以目标如此低的API级别。 编辑1: 我只是提取由核心模块生成的jar文件,并使用javap工具检查类文件。 我在随机类文件上运行以下命令 java -verbose […]

如何调试NoClassDefFoundError(Gradle,Kotlin)

运行时我的kotlin项目,我得到以下错误: java.lang.NoClassDefFoundError: com/julianjarecki/latextemplates/lib/jtwig/RequireNodeParser at com.julianjarecki.latextemplates.lib.jtwig.RequireNodeParserProvider.(RequireNodeParserProvider.kt:8) at com.julianjarecki.latextemplates.lib.jtwig.RequireExtension.configure(RequireExtension.kt:11) at org.jtwig.environment.EnvironmentFactory.create(EnvironmentFactory.java:60) at com.julianjarecki.latextemplates.lib.jtwig.LatexTemplate.getLatexRequireEnvironment(LatexParser.kt:76) at com.julianjarecki.latextemplates.lib.jtwig.LatexTemplate.access$getLatexRequireEnvironment$p(LatexParser.kt:68) at com.julianjarecki.latextemplates.lib.jtwig.LatexTemplate$template$2.invoke(LatexParser.kt:73) at com.julianjarecki.latextemplates.lib.jtwig.LatexTemplate$template$2.invoke(LatexParser.kt:68) at com.julianjarecki.latextemplates.lib.UpdatableLazy.getValue(UpdatableLazy.kt:17) at com.julianjarecki.latextemplates.lib.jtwig.LatexTemplate.getTemplate(LatexParser.kt) at com.julianjarecki.latextemplates.view.MainView$root$1$4$1$1$2.invoke(MainView.kt:133) at com.julianjarecki.latextemplates.view.MainView$root$1$4$1$1$2.invoke(MainView.kt:35) at tornadofx.NodesKt$onDoubleClick$1.handle(Nodes.kt:484) at tornadofx.NodesKt$onDoubleClick$1.handle(Nodes.kt) at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86) 事实上,当我查看我的buil文件夹时,RequireNodeParser.class不是它应该在的地方。 这个类在RequireNodeParserProvider中是这样引用的: package com.julianjarecki.latextemplates.lib.jtwig import org.jtwig.parser.addon.AddonParserProvider import org.jtwig.parser.parboiled.node.AddonParser import com.julianjarecki.latextemplates.lib.jtwig.RequireNodeParser class RequireNodeParserProvider : AddonParserProvider { override fun keywords(): MutableCollection = mutableListOf(RequireKeywords.REQUIRE.token) override fun parser(): […]

在Spring Boot项目中使用Gradle从Kotlin测试引用Java代码时未解决的参考

我有一个项目,我正在使用Kotlin和Java代码。 我的主要Kotlin代码(包括@SpringBootApplication主类)在src / main / kotlin中,但是在src / main / java中有一些旧的客户端库代码。 我也在src / test / kotlin有一些测试。 在IntelliJ中,我可以运行测试没有问题,但是当我使用gradle测试运行测试时,我得到错误cannot access class ** Unresolved reference , cannot access class ** 。 我不确定这是为什么发生。 这些错误与Java类中的代码有关。 我的kotlin代码和测试与客户端库代码稍有不同, 我的主要代码位于名为com.sky.vision.playlistapi的包中,客户端库位于名为com.sky.nifty的包中。 我想知道这可能是问题的根源吗? 我的build.gradle文件在这里: buildscript { ext { kotlinVersion = ‘1.2.10’ } } plugins { id ‘java’ id ‘org.springframework.boot’ version ‘1.5.9.RELEASE’ id ‘org.jetbrains.kotlin.jvm’ version’1.2.10′ id ‘org.jetbrains.kotlin.plugin.allopen’ […]

Kotlin:使用lambda代替function界面?

在Java中,我们可以这样做Events.handler(Handshake.class, hs -> out.println(hs)); 但是在Kotlin中,我试图复制这个行为来取代这个: Events.handler(Handshake::class, object : EventHandler { override fun handle(event: Handshake) { println(event.sent) } }) 用更方便: Events.handler(Handshake::class, EventHandler { println(it.sent) }) 出于某种原因参考EventHandler : 更好的是,但是我想使用更短的东西,像这样: Events.handler(Handshake::class, { println(it.sent) }) 或者使用广告的function来使用这样的方法: Events.handler(Handshake::class) { println(it.sent) } 这是我的Events对象: import java.util.* import kotlin.reflect.KClass object Events { private val map = HashMap<Class, Set<EventHandler>>() fun handler(eventType: KClass, handler: EventHandler) […]

IntelliJ:Kotlin错误导致鼠标闪烁和代码中的错误

我用Kotlin beta-1038使用IntelliJ 15,并且在eclipse底部得到这个错误。 Internal Error occurred while analyzing this expression: java.util.ServiceConfigurationError: org.jetbrains.kotlin.resolve.ExternalOverridabilityCondition: Provider org.jetbrains.kotlin.load.java.ErasedOverridabilityCondition not found at java.util.ServiceLoader.fail(ServiceLoader.java:239) at java.util.ServiceLoader.access$300(ServiceLoader.java:185) at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:372) at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:404) at java.util.ServiceLoader$1.next(ServiceLoader.java:480) at kotlin.CollectionsKt___CollectionsKt.toCollection(_Collections.kt:949) at kotlin.CollectionsKt.toCollection(Unknown Source) at kotlin.CollectionsKt___CollectionsKt.toArrayList(_Collections.kt:942) at kotlin.CollectionsKt.toArrayList(Unknown Source) at kotlin.CollectionsKt___CollectionsKt.toList(_Collections.kt:973) at kotlin.CollectionsKt.toList(Unknown Source) at org.jetbrains.kotlin.resolve.OverridingUtil.(OverridingUtil.java:41) at org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedClassDescriptor$DeserializedClassMemberScope.generateFakeOverrides(DeserializedClassDescriptor.kt:216) at org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedClassDescriptor$DeserializedClassMemberScope.computeNonDeclaredFunctions(DeserializedClassDescriptor.kt:202) at org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedMemberScope.computeFunctions(DeserializedMemberScope.kt:77) at org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedMemberScope.access$computeFunctions(DeserializedMemberScope.kt:32) at org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedMemberScope$functions$1.invoke(DeserializedMemberScope.kt:50) at org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedMemberScope$functions$1.invoke(DeserializedMemberScope.kt:32) […]

Intellij没有测试发现Kotlin

我正在尝试通过Intellij Idea Ultimate 2017.2中的Kotlin Koans进行工作,并且遇到了运行测试的问题。 我已经将测试目录标记为这样,但是当我尝试将它们作为整体或个别地使用Intellij添加到测试中的排水沟中的三角形箭头运行时,我得到“没有find测试”错误。 截图附上。

生成Kotlin方法/类的注释

你如何为你的方法/类生成评论? 只需输入: /** 在IntelliJ IDEA 2016.1.3中,推入输入似乎不起作用 看起来Dokka已经取代了KDoc,但为什么IntelliJ没有支持? 还是我错过了什么? 澄清:在/ ** +输入时,会产生: /** * */ 但是我想知道为什么不添加@param和其他的一代(像IntelliJ为Java)。 这些注释也用于记录Kotlin代码( https://kotlinlang.org/docs/reference/kotlin-doc.html )

我怎样才能用Kotlin DSL为Gradle配置Kotlin协程?

在Kotlin-DSL中使用Gradle 4.4.1,我想在我的Kotlin 1.2.20项目中配置实验Kotlin协同程序。 这certificate是非常困难的。 官方的Kotlin文档本身只提到Gradle和Groovy DSL,而不是Kotlin。 Kotlin-DSL项目有一个协程不起作用的例子 。 可能是为了一个较老的Gradle版本(该脚本中的Kotlin版本是1.1.51,本身是可疑的)。 PS:即使IntelliJ的配置Kotlin写不正确的Gradle代码。 降级唯一的选择? 附录:构建脚本在IntelliJ IDEA中非常红 。 IDE始终添加导入语句。 看来,这些徒劳的尝试是使剧本不起作用的。 我禁用了“临时添加unambiguos导入”,即使脚本保持大部分为红色,Gradle也可以执行它。 之后,IntelliJ的错误消息也没有了。

kotlin项目不能在gradle中构建

我有一个java项目写在kotlin,我使用intelliJ IDEA来开发这个项目。 我有依赖关系设置(多个项目)的麻烦。 我已经阅读了大量的例子,但是我找不到解决方法,这里是我的依赖设置代码,它可以正确的在java类中构建,但是kotlin类会得到很多错误’Unresolved reference’。 对于我的设置是否有任何错误或gradle是不适合与kotlin。 PS:当我只构建核心项目时,构建过程会成功,但是在测试项目中构建会得到参考未解决的错误 allprojects { apply plugin: ‘java’ apply plugin: ‘kotlin’ group ‘testProject’ version ‘1.0’ } subprojects{ apply plugin: ‘java’ apply plugin: ‘kotlin’ def defaultEncoding = ‘UTF-8’ compileJava.options.encoding = defaultEncoding sourceCompatibility = 1.8 targetCompatibility = 1.8 repositories { mavenCentral() mavenLocal() } dependencies { // Kotlin compile “org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version” compile “org.jetbrains.kotlin:kotlin-reflect:$kotlin_version” compile “org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version” […]

使用IntelliJ的Gluon / JavaFXPorts的Android应用程序 – Android设置不完整

我刚刚在IntelliJ上创建了一个简单的应用程序,并且想知道为什么在我的AndroidManifest.xml编辑器中有这么多的红色。 我注意到,模块设置似乎有点关闭。 由于我不是IntelliJ上的专家,所以在打破Gradle或其他方面之前,我宁愿问一下。 简而言之:我如何设置项目,以便我拥有完整的Android支持,支持库和日志视图集成。 提前致谢。 #edit为了显示我的例子,这里是build.gradle文件。 也许这有帮助。 此外,我正在使用IntelliJ IDEA 2017.2.5。 buildscript { ext.kotlin_version = '1.1.4-3' repositories { jcenter() mavenCentral() mavenLocal() } dependencies { classpath 'org.javafxports:jfxmobile-plugin:1.3.8' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } plugins { id "com.github.ben-manes.versions" version "0.15.0" } dependencyUpdates.resolutionStrategy = { componentSelection { rules -> rules.all { ComponentSelection selection -> boolean rejected = ['alpha', 'alpha-preview', 'beta', 'rc', […]