MapDB ClassNotFoundException:kotlin.jvm.internal.Intrinsics
我想运行一个简单的mapdb例子,但得到的错误:
Exception in thread "main" java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics at org.mapdb.DBMaker.fileDB(DBMaker.kt) at leechies.Truc.main(Truc.java:9) Caused by: java.lang.ClassNotFoundException: kotlin.jvm.internal.Intrinsics at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 2 more
我的课:
package leechies; import java.util.concurrent.ConcurrentMap; import org.mapdb.DB; import org.mapdb.DBMaker; public class Truc { public static void main(String[] args) { DB db = DBMaker.fileDB("file.db").make(); ConcurrentMap map = db.hashMap("map").createOrOpen(); map.put("something", "here"); db.close(); } }
我的pomx.xml
<dependencies> <dependency> <groupId>org.mapdb</groupId> <artifactId>mapdb</artifactId> <version>3.0.3</version> </dependency>
我运行与rigth点击 – >运行为… – > Java应用程序。
它会失败,因为你的类路径中没有必要的kotlin运行时jar。 你必须运行一些命令来解决这个错误。 请参考这个链接的命令: –
https://dzone.com/articles/exercises-in-kotlin-part-1-getting-started
kotlin-runtime
必须位于classpath
并使用$ echo $CLASSPATH
验证。
或者你必须添加kotlin-runtime
到maven,然后用mvn compile assembly:single
在jar本身内部进行mvn compile assembly:single
,
<dependency> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-runtime</artifactId> <version>1.1.3</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-stdlib</artifactId> <version>1.1.3</version> <scope>compile</scope> </dependency>
这也需要附加到工件,并可以使用assembly-plugin
。
<plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <archive> <manifest> <mainClass>event.handlers.InventoryEventHandler</mainClass> </manifest> </archive> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> </plugin>
你可以验证kotlin-runtime被添加到jar中
$ jar -tf target/amz-wavelength-1.0-SNAPSHOT-jar-with-dependencies.jar | grep kotlin-runtime META-INF/kotlin-runtime.kotlin_module
要么
$ jar -tf target/amz-wavelength-1.0-SNAPSHOT-jar-with-dependencies.jar | grep "kotlin/jvm/internal/*"
也许从maven运行你的类,它会添加所有必要的依赖关系。
运行Maven项目的主要类