2015-12-17 1 views
2

$ J'utilise Akka Distribuée avec Java Publish abonner, après this examples de la documentation

Mais chaque fois que je lance mon code je reçois un java.lang.NoClassDefFoundError: scala/Predef$any2stringadd$

Il semble qu'il ne peut pas classer la bibliothèque de scala mais je peux voir la bibliothèque de scala sur l'onglet de dépendances. J'utilise également la même version pour les deux dépendances Akka.

Mes dépendances sur le pom.xml:

<dependencies> 
    <dependency> 
     <groupId>org.twitter4j</groupId> 
     <artifactId>twitter4j-core</artifactId> 
     <version>[4.0,)</version> 
    </dependency> 
    <dependency> 
     <groupId>org.twitter4j</groupId> 
     <artifactId>twitter4j-stream</artifactId> 
     <version>[4.0,)</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.kafka</groupId> 
     <artifactId>kafka_2.10</artifactId> 
     <version>0.8.2.2</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.zookeeper</groupId> 
     <artifactId>zookeeper</artifactId> 
     <version>3.4.6</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.storm</groupId> 
     <artifactId>storm-core</artifactId> 
     <version>0.10.0</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.storm</groupId> 
     <artifactId>storm-kafka</artifactId> 
     <version>0.10.0</version> 
    </dependency> 
    <dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-databind</artifactId> 
     <version>2.6.4</version> 
    </dependency> 
    <dependency> 
     <groupId>com.typesafe.akka</groupId> 
     <artifactId>akka-actor_2.11</artifactId> 
     <version>2.4.1</version> 
    </dependency> 
    <dependency> 
     <groupId>com.typesafe.akka</groupId> 
     <artifactId>akka-cluster-tools_2.11</artifactId> 
     <version>2.4.1</version> 
    </dependency> 
</dependencies> 

Et IntelliJ montre:

enter image description here

C'est le code qui est à l'origine l'exception:

ActorSystem actorSystem = ActorSystemManager.INSTANCE.getActorSystem(); 
ActorRef actorSubscriber = actorSystem.actorOf(Props.create(TwitterSubscriber.class)); 

ActorSystemManager est un singl eton de contourner le système des acteurs.

public enum ActorSystemManager { 
    INSTANCE; 

    private final ActorSystem actorSystem; 

    private ActorSystemManager() { 
     actorSystem = ActorSystem.create("localized_tweets"); 
    } 

    public ActorSystem getActorSystem() { 
     return actorSystem; 
    } 
} 

Et voici la trace complète de la pile:

Connected to the target VM, address: '127.0.0.1:51608', transport: 'socket' 
Exception in thread "main" java.lang.NoClassDefFoundError: scala/Predef$any2stringadd$ 
    at akka.actor.RootActorPath.<init>(ActorPath.scala:273) 
    at akka.event.Logging$StandardOutLogger.<init>(Logging.scala:800) 
    at akka.event.Logging$.<init>(Logging.scala:821) 
    at akka.event.Logging$.<clinit>(Logging.scala) 
    at akka.event.LoggingBus$class.setUpStdoutLogger(Logging.scala:74) 
    at akka.event.LoggingBus$class.startStdoutLogger(Logging.scala:90) 
    at akka.event.EventStream.startStdoutLogger(EventStream.scala:28) 
    at akka.actor.ActorSystemImpl.<init>(ActorSystem.scala:613) 
    at akka.actor.ActorSystem$.apply(ActorSystem.scala:143) 
    at akka.actor.ActorSystem$.apply(ActorSystem.scala:110) 
    at akka.actor.ActorSystem$.create(ActorSystem.scala:58) 
    at akka.actor.ActorSystem.create(ActorSystem.scala) 
    at com.dazito.twitter.akka.ActorSystemManager.<init>(ActorSystemManager.java:16) 
    at com.dazito.twitter.akka.ActorSystemManager.<clinit>(ActorSystemManager.java:11) 
    at com.dazito.twitter.Main.main(Main.java:36) 
Caused by: java.lang.ClassNotFoundException: scala.Predef$any2stringadd$ 
    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) 
    ... 15 more 
Disconnected from the target VM, address: '127.0.0.1:51608', transport: 'socket' 

Toute aide sur comment puis-je résoudre cette exception?

Répondre

2

Vous avez des dépendances conflictuelles: kafka_2.10 requiert Scala 2.10, alors que akka-actor_2.11 requiert Scala 2.11 et les bibliothèques ne sont pas compatibles binaires. Utilisez kafka_2.11 à la place. (Bien que vous ayez accepté l'autre réponse, si vous ne changez pas la dépendance de Kafka, vous pouvez rencontrer des problèmes similaires.)

Maven ne peut pas vous aider, car il ne connaît pas la version Scala suffixe convention pour les bibliothèques et ne traite pas scala-library spécialement. Donc, il ne peut pas remarquer le conflit. Vous pouvez utiliser SBT même pour des projets Java si vous avez des dépendances Scala; ou utiliser

<properties><scala.version>2.11</scala.version></properties> 
... 
kafka_${scala.version} 
... 
akka-actor_${scala.version} 
3

Mettez à jour votre bibliothèque de scala vers la version 2.11.

+0

Je pensais que les dépendances Akka apporteraient la bonne version de la bibliothèque de scala. Merci. – dazito