【发布时间】:2018-05-24 06:44:29
【问题描述】:
我正在尝试使用一个名为 ts-generator 的 Typescript 生成库。它位于https://github.com/ntrrgc/ts-generator。看起来很酷。
我的问题是当尝试使用该库时,我得到一个
kotlin.jvm.KotlinReflectionNotSupportedError
错误消息还说我可能缺少 kotlin-reflect.jar
但是,该 jar 似乎确实在我的类路径中。我制作了一个 SSCE,我认为它可以证明我的问题,如下所示。
我的 gradle 文件是
jar {
baseName = 'eiep_codegen'
version = '1'
}
repositories {
maven { url 'https://jitpack.io' }
}
dependencies {
compile 'com.github.ntrrgc:ts-generator:1.1.0'
}
task execute(type:JavaExec) {
main = mainClass
classpath = sourceSets.main.runtimeClasspath
}
我要运行的代码是
package testing;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import kotlin.jvm.internal.ClassReference;
import kotlin.reflect.KClass;
import me.ntrrgc.tsGenerator.TypeScriptGenerator;
import me.ntrrgc.tsGenerator.VoidType;
public class GenerateTSClasses
{
public static void main(String []args)
{
ClassLoader cl = ClassLoader.getSystemClassLoader();
URL[] urls = ((URLClassLoader)cl).getURLs();
for(URL url: urls){
System.out.println(url.getFile());
}
List<KClass<?>> roots = new ArrayList<>();
Map<KClass<?>, String> mappings = new HashMap<>();
roots.add(new ClassReference(GenerateMe.class));
System.out.println
(
new TypeScriptGenerator
(
roots,
mappings,
new ArrayList<>(),
new HashSet<>(),
"Hey There",
VoidType.NULL
).getDefinitionsText()
);
}
}
我运行任务时的输出如下。第一位是类路径的转储,列表中有 kotlin-reflect-1.2.10.jar。第二部分是例外。
/Users/joe/git/4.x/ei-sources/eiep_codegen/build/classes/java/main/
/Users/joe/git/4.x/ei-sources/eiep_codegen/build/resources/main
/Users/joe/.gradle/caches/modules-2/files-2.1/com.github.ntrrgc/ts-generator/1.1.0/3c9db2d2350dae022e3d4c8e77589a3e7f50db2b/ts-generator-1.1.0.jar
/Users/joe/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-reflect/1.2.10/19bc012f8c4cd6b705bd6512263777cc19bcf259/kotlin-reflect-1.2.10.jar
/Users/joe/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/1.2.10/b9bf650516989595a5390e5a54181e16347208ac/kotlin-stdlib-1.2.10.jar
/Users/joe/.gradle/caches/modules-2/files-2.1/org.jetbrains/annotations/13.0/919f0dfe192fb4e063e7dacadee7f8bb9a2672a9/annotations-13.0.jar
Exception in thread "main" kotlin.jvm.KotlinReflectionNotSupportedError: Kotlin reflection implementation is not found at runtime. Make sure you have kotlin-reflect.jar in the classpath
at kotlin.jvm.internal.ClassReference.error(ClassReference.kt:86)
...
我的问题是 - 有谁知道是什么导致了这个问题? (我假设它不能是 jar 文件后面的版本号,但我也会验证)。
编辑 - 我还手动处理了 jar 文件,并使用 java --classpath 从命令行运行程序。 jar 文件的名称(如您所想)对结果没有影响。
【问题讨论】: