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项目的主要类