简体   繁体   English

获取 Akka stream 代码错误“主”线程 java.lang.NoClassDefFoundError: scala/Function1$class

[英]Error getting Akka stream code Exception in thread “main” java.lang.NoClassDefFoundError: scala/Function1$class

I am getting below java error, when I am running the akka stream code: ** Exception in thread "main" java.lang.NoClassDefFoundError: scala/Function1$class at akka.stream.Supervision$$anon$1.(Supervision.scala:57) at akka.stream.Supervision$.(Supervision.scala:57) at akka.stream.Supervision$.(Supervision.scala) at akka.stream.ActorMaterializerSettings$.apply(ActorMaterializer.scala:268) at akka.stream.ActorMaterializerSettings$.apply(ActorMaterializer.scala:258) at ZBF0937 I am getting below java error, when I am running the akka stream code: ** Exception in thread "main" java.lang.NoClassDefFoundError: scala/Function1$class at akka.stream.Supervision$$anon$1.(Supervision.scala :57) at akka.stream.Supervision$.(Supervision.scala:57) at akka.stream.Supervision$.(Supervision.scala) at akka.stream.ActorMaterializerSettings$.apply(ActorMaterializer.scala:268) at akka. stream.ActorMaterializerSettings$.apply(ActorMaterializer.scala:258) 在 ZBF0937 FCB05B460E447A0BEA7537218AZ.stream.ActorMaterializer$$anonfun$1.apply(ActorMaterializer.scala:42) at akka.stream.ActorMaterializer$$anonfun$1.apply(ActorMaterializer.scala:42) at scala.Option.getOrElse(Option.scala:121) at akka.stream.ActorMaterializer$.apply(ActorMaterializer.scala:42) at akka.stream.ActorMaterializer$.create(ActorMaterializer.scala:111) at akka.stream.ActorMaterializer.create(ActorMaterializer.scala) at com.accenture.akka.stream.Sample1.main(Sample1.Z93F FCB05B460E447A0BEA7537218AZ.stream.ActorMaterializer$$anonfun$1.apply(ActorMaterializer.scala:42) at akka.stream.ActorMaterializer$$anonfun$1.apply(ActorMaterializer.scala:42) at scala.Option.getOrElse(Option.scala:121) at akka.stream.ActorMaterializer$.apply(ActorMaterializer.scala:42) at akka.stream.ActorMaterializer$.create(ActorMaterializer.scala:111) at akka.stream.ActorMaterializer.create(ActorMaterializer.scala) at com.accenture. akka.stream.Sample1.main(Sample1.Z93F 725A07423FE1C889F448B33D21F46Z:15) Caused by: java.lang.ClassNotFoundException: scala.Function1$class at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 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)... 12 more ** Java Code: 725A07423FE1C889F448B33D21F46Z:15) Caused by: java.lang.ClassNotFoundException: scala.Function1$class at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 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)... 12 more ** Java Code:

import java.io.IOException;
import java.util.Arrays;

import akka.NotUsed;
import akka.actor.ActorSystem;
import akka.stream.ActorMaterializer;
import akka.stream.javadsl.Source;
public class Sample1 {
  public static void main(String[] args) throws IOException {
    final ActorSystem system = ActorSystem.create("Sys");
    final ActorMaterializer materializer = ActorMaterializer.create(system);

    final String text =
      "Lorem Ipsum is simply dummy text of the printing and typesetting industry. " +
      "Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, " +
      "when an unknown printer took a galley of type and scrambled it to make a type " +
      "specimen book.";

    Source.from(Arrays.asList(text.split("\\s"))).
      // transform
      map(e -> e.toUpperCase()).
      // print to console
      runForeach(System.out::println, materializer).
      handle((done, failure) -> {
        system.terminate();
        return NotUsed.getInstance();
      });
  }

}

Maven code: Maven 代码:

<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.accenture.akka</groupId>
    <artifactId>AkkaDemo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <build>
        <sourceDirectory>src</sourceDirectory>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>


        <!-- akka dependency -->
        <dependency>
            <groupId>com.typesafe.akka</groupId>
            <artifactId>akka-actor_2.12</artifactId>
            <version>2.5.11</version>
        </dependency>
        <dependency>
            <groupId>org.apache.kafka</groupId>
            <artifactId>kafka_2.11</artifactId>
            <version>1.1.0</version>
        </dependency>
        <dependency>
            <groupId>com.typesafe.akka</groupId>
            <artifactId>akka-stream_2.11</artifactId>
            <version>2.5.2</version>
        </dependency>
        <dependency>
            <groupId>com.typesafe.akka</groupId>
            <artifactId>akka-stream-testkit_2.11</artifactId>
            <version>2.5.2</version>
        </dependency>
        <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-library</artifactId>
            <version>2.12.0</version>
        </dependency>
    </dependencies>
</project>

Please tell us what I am doing wrong请告诉我们我做错了什么

Your dependencies mix libraries that have been compiled for different Scala versions.您的依赖项混合了针对不同 Scala 版本编译的库。 In general, Scala does not guarantee binary compatibility between minor versions, which is why the dependencies contain _2.11 or _2.12 in the artifact IDs.通常,Scala 不保证次要版本之间的二进制兼容性,这就是依赖项在工件 ID 中包含_2.11_2.12的原因。 You need to choose one and use it consistently.您需要选择一个并始终如一地使用它。 In this case, since you are including scala-library version 2.12.0 , you should use artifacts ending with _2.12 .在这种情况下,由于您包含scala-library版本2.12.0 ,因此您应该使用以_2.12结尾的工件。 It's also important not to mix different versions of Akka libraries, so you should use 2.5.11 for all of the Akka dependencies.同样重要的是不要混合不同版本的 Akka 库,因此您应该对所有 Akka 依赖项使用 2.5.11。 I would also recommend assigning the akka-stream-testkit dependency to the test scope, as with junit .我还建议将akka-stream-testkit依赖项分配给test scope,就像junit Here's a corrected example:这是一个更正的示例:

    <dependency>
        <groupId>com.typesafe.akka</groupId>
        <artifactId>akka-actor_2.12</artifactId>
        <version>2.5.11</version>
    </dependency>
    <dependency>
        <groupId>org.apache.kafka</groupId>
        <artifactId>kafka_2.12</artifactId>
        <version>1.1.0</version>
    </dependency>
    <dependency>
        <groupId>com.typesafe.akka</groupId>
        <artifactId>akka-stream_2.12</artifactId>
        <version>2.5.11</version>
    </dependency>
    <dependency>
        <groupId>com.typesafe.akka</groupId>
        <artifactId>akka-stream-testkit_2.12</artifactId>
        <version>2.5.11</version>
        <scope>test</scope>
    </dependency>

Note that it is safe to update the patch version of scala-libary without changing other dependencies.请注意,在不更改其他依赖项的情况下更新scala-libary的补丁版本是安全的。 Currently, the latest version of Scala 2.12 is 2.12.11.目前Scala 2.12的最新版本是2.12.11。 Using the latest version will ensure you have all of the bug fixes:使用最新版本将确保您拥有所有错误修复:

    <dependency>
        <groupId>org.scala-lang</groupId>
        <artifactId>scala-library</artifactId>
        <version>2.12.11</version>
    </dependency>

Similarly, the latest version of Akka 2.5 is 2.5.31.同样,Akka 2.5 的最新版本是 2.5.31。 I would recommend you use that instead of 2.5.11.我建议您使用它而不是 2.5.11。

I would also recommend defining akka.version and scala.binary.version as Maven properties , to allow you to easily change them in one place.我还建议将akka.versionscala.binary.version定义为Maven 属性,以便您在一个地方轻松更改它们。

Putting all of the recommendations together:将所有建议放在一起:

<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.accenture.akka</groupId>
    <artifactId>AkkaDemo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <build>
        <sourceDirectory>src</sourceDirectory>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>


        <!-- akka dependency -->
        <dependency>
            <groupId>com.typesafe.akka</groupId>
            <artifactId>akka-actor_${scala.binary.version}</artifactId>
            <version>${akka.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.kafka</groupId>
            <artifactId>kafka_${scala.binary.version}</artifactId>
            <version>1.1.0</version>
        </dependency>
        <dependency>
            <groupId>com.typesafe.akka</groupId>
            <artifactId>akka-stream_${scala.binary.version}</artifactId>
            <version>${akka.version}</version>
        </dependency>
        <dependency>
            <groupId>com.typesafe.akka</groupId>
            <artifactId>akka-stream-testkit_${scala.binary.version}</artifactId>
            <version>${akka.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-library</artifactId>
            <version>2.12.11</version>
        </dependency>
    </dependencies>
    <properties>
        <akka.version>2.5.31</akka.version>
        <scala.binary.version>2.12</scala.binary.version>
    </properties>
</project>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM