【问题标题】:java.lang.NoClassDefFoundError: scala/Function1java.lang.NoClassDefFoundError: scala/Function1
【发布时间】:2019-02-01 20:45:26
【问题描述】:

我尝试在 jar 中启动 scala 应用程序。

以下代码:

object Starter {
    def main(args: Array[String]): Unit = {
        args.foreach(path => {
            val (minX, maxX, minY, maxY) = MainStage.run(path)
            println(minX)
            println(maxX)
            println(minY)
            println(maxY)
        })
    }
}

在同一台计算机上引发错误(尽管它在 Intellij Idea 中工作):

$ java -cp foo-1.0-SNAPSHOT.jar ogr.bar.system.Starter
Exception in thread "main" java.lang.NoClassDefFoundError: scala/Function1
    at ogr.bar.system.Starter.main(Starter.scala)
Caused by: java.lang.ClassNotFoundException: scala.Function1
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:338)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 1 more

然后我尝试制作一个简单的hello world应用程序:

object Starter {
    def main(args: Array[String]): Unit = {
        println("hello world")
        //args.foreach(path => {
        //      val (minX, maxX, minY, maxY) = MainStage.run(path)
        //      println(minX)
        //      println(maxX)
        //      println(minY)
        //      println(maxY)
        //})
    }
}

它会引发异常:

$ java -cp foo-1.0-SNAPSHOT.jar ogr.bar.system.Starter
Exception in thread "main" java.lang.NoClassDefFoundError: scala/Predef$
        at ogr.bar.system.Starter$.main(Starter.scala:7)
        at ogr.bar.system.Starter.main(Starter.scala)
Caused by: java.lang.ClassNotFoundException: scala.Predef$
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:338)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        ... 2 more  

以下是我pom.xml的片段

<properties>
    <javaVersion>1.8</javaVersion>
</properties>

<dependencies>
    <dependency>
        <groupId>org.scala-lang</groupId>
        <artifactId>scala-library</artifactId>
        <version>2.11.8</version>
    </dependency>
    <dependency>
        <groupId>org.scala-lang.modules</groupId>
        <artifactId>scala-xml_2.11</artifactId>
        <version>1.0.4</version>
    </dependency>
    <dependency>
        <groupId>org.scalatest</groupId>
        <artifactId>scalatest_2.11</artifactId>
        <version>3.0.1</version>
        <scope>test</scope>
    </dependency>

</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.3</version>
            <configuration>
                <source>${javaVersion}</source>
                <target>${javaVersion}</target>
            </configuration>
        </plugin>

        <plugin>
            <groupId>org.scala-tools</groupId>
            <artifactId>maven-scala-plugin</artifactId>
            <version>2.15.2</version>
            <executions>
                <execution>
                    <goals>
                        <goal>compile</goal>
                        <goal>testCompile</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <sourceDir>src/main/scala</sourceDir>
                <testSourceDir>src/test/scala</testSourceDir>
            </configuration>
        </plugin>

    </plugins>
</build>             

我应该怎么做才能让我的应用正常运行?

【问题讨论】:

    标签: scala maven jar noclassdeffounderror


    【解决方案1】:

    问题是您可能构建了应用程序的精简版本。

    它不包含所有依赖项,例如 scala-library。因此错误

    java.lang.NoClassDefFoundError: scala/Predef$
    

    how to do build fat jars in maven 上查看。

    【讨论】:

      猜你喜欢
      • 2014-08-16
      • 1970-01-01
      • 2017-07-18
      • 2013-08-08
      • 2016-03-24
      • 1970-01-01
      • 2016-08-15
      • 2017-03-06
      • 2016-09-27
      相关资源
      最近更新 更多