我想在Android中运行Kotlin脚本(以字符串形式):
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val engine = KotlinJsr223DefaultScriptEngineFactory().getScriptEngine()
engine.eval("val x =3")
val result = engine.eval("x+2")
Log.d("test", "onCreate: result=$result")
}
}
我添加的依赖关系:
implementation "org.jetbrains.kotlin:kotlin-scripting-jsr223:1.4.0"
implementation "org.jetbrains.kotlin:kotlin-script-runtime:1.4.0"
implementation "org.jetbrains.kotlin:kotlin-compiler-embeddable:1.4.0"
但是我不能编译代码,错误是“重复的类”:
Duplicate class org.jetbrains.kotlin.daemon.common.WallTotalProfiler found in modules jetified-kotlin-daemon-client-1.4.0 (org.jetbrains.kotlin:kotlin-daemon-client:1.4.0) and jetified-kotlin-daemon-embeddable-1.4.0 (org.jetbrains.kotlin:kotlin-daemon-embeddable:1.4.0)
如果我移除kotlin-compiler-embeddable的依赖项,重复类错误就消失了。但是会出现一个新的错误:
Cannot access 'javax.script.ScriptEngineFactory' which is a supertype of 'kotlin.script.experimental.jsr223.KotlinJsr223DefaultScriptEngineFactory'. Check your module classpath for missing or conflicting dependencies
我该怎么做?
1条答案
按热度按时间kse8i1jr1#
正如错误所说,你的模块中有重复的类。这意味着一个类包含在你添加的两个或多个依赖项中。您应该检查这些模块的依赖项,并使用
exclude
从它们中排除重复的依赖项,以便只有一个依赖项包含重复的依赖项。您可以阅读更多关于Gradle的exclude here。
此外,您可以使用Gradle的dependencies命令来生成项目所有依赖项的树。
请注意,还有其他方法可以解决此问题,只需搜索“删除Gradle模块中的重复类”或类似的内容:)