运行Scala Maven项目

时间:2019-02-16 11:45:41

标签: scala maven intellij-idea

我是Scala初学者,并且在Maven上运行了一个启动器项目,并使用IntelliJ作为IDE。

这是我正在使用Github project的github上项目的链接,并且我是根据OpenJDK8编译项目的。

HelloJava类成功运行,但是,当我尝试运行HelloScala类时,遇到以下错误:

java -cp scala-maven-example-1.0.0-SNAPSHOT.jar com.jesperdj.example.HelloScala

Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.NoClassDefFoundError: scala/Function0
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
at java.lang.Class.getMethod0(Class.java:3018)
at java.lang.Class.getMethod(Class.java:1784)
at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526)

Caused by: java.lang.ClassNotFoundException: scala.Function0
   at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
   at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
   at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
   at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 7 more

3 个答案:

答案 0 :(得分:2)

Scala在JVM之上具有自己的运行时库。已编译的Scala .class import从Scala运行时库中提取了一些类。当您尝试运行Scala .class文件时,需要将Scala运行时追加到classpath

如果您在IntelliJ IDEA中运行,则Scala插件将自动执行此操作,但是当您从命令行运行java时,您应该自己执行此操作。

如果您正在使用Maven,则可以添加<plugin>。来自Scala Docs -> Scala with Maven -> Creating a Jar

<build>
    ...
    <plugins>
        ...
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
                <archive>
                    <manifest>
                        <mainClass>com.your-package.MainClass</mainClass>
                    </manifest>
                </archive>
            </configuration>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
     

添加此内容后,mvn软件包还将在目标下创建[artifactId]-[version] -jar-with-dependencies.jar。 注意:这还将将Scala库复制到您的Jar中。这是正常的。请注意,您的依赖项使用的是相同版本的Scala,否则您很快就会得到一个巨大的Jar。

答案 1 :(得分:0)

要在Intellij上运行程序,您需要与JDK一起安装scala sdk。

一旦Intellij类路径中有scala SDK,就可以使用scala编码了。

答案 2 :(得分:0)

在“运行\调试配置”下勾选“包含具有“提供”范围的依赖项”复选框。 (如果您的项目是 Maven 项目,并且您将“scala-library”依赖范围添加为“提供”,则会有所帮助) 'Run\Debug Configurations'