Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MapDB ClassNotFoundException:kotlin.jvm.internal.Intrinsics_Java_Maven_Kotlin_Noclassdeffounderror_Mapdb - Fatal编程技术网

Java MapDB ClassNotFoundException:kotlin.jvm.internal.Intrinsics

Java MapDB ClassNotFoundException:kotlin.jvm.internal.Intrinsics,java,maven,kotlin,noclassdeffounderror,mapdb,Java,Maven,Kotlin,Noclassdeffounderror,Mapdb,我正在尝试运行一个简单的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:

我正在尝试运行一个简单的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>

org.mapdb
mapdb
3.0.3

我使用rigth运行单击->以…->java应用程序。

它将失败,因为类路径中没有必要的kotlin运行时jar。您必须运行一些命令来解决此错误。有关命令,请参阅此链接:-


可能从maven运行您的类,它将添加所有必要的依赖项


kotlin runtime必须位于
classpath
中,并使用
$echo$classpath
进行验证

或者您必须向maven添加
kotlin runtime
,然后使用
mvn compile assembly:single
在jar内部进行组装

<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>
您可以通过以下方式验证kotlin运行时是否添加到jar中:

$ jar -tf target/amz-wavelength-1.0-SNAPSHOT-jar-with-dependencies.jar | grep kotlin-runtime
META-INF/kotlin-runtime.kotlin_module


@prayagupd的答案对我很有用。但我认为值得一提的是,另一个选项是使用而不是(将其放在pom.xml文件的
build/plugins
部分):


org.apache.maven.plugins
maven阴影插件
2.4.3
包裹
阴凉处

shade插件很好,因为它允许您排除重复的类。如果你必须使用任何一个插件,最好知道你不需要两个插件。在我的快速测试中,构建时间和生成的jar文件大小几乎相同,但是汇编插件(prayagupd建议的)没有在构建输出中添加大量警告,因此我将继续使用它。

尝试清理和构建projectI在命令行中遇到同样的问题。这样更好,但是我得到了:java.lang.NoClassDefFoundError:org/eclipse/collections/api/list/primitive/MutableLongList
$ 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/*"
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>2.4.3</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
        </execution>
    </executions>
</plugin>