2015-06-23 21 views
19

uczę Akka-usług zdalnych i to jest jak mój projekt wyglądaNie znaleziono ustawienia konfiguracji dla klucza „akka.version”

Struktura projekt wygląda

project/pom.xml 
project/mymodule/pom.xml 
project/mymodule/src/main/resources/application.conf 
project/mymodule/src/main/scala/com.harit.akkaio.remote.RemoteApp.scala 
project/mymodule/src/main/scala/com.harit.akkaio.remote.ProcessingActor.scala 

Kiedy uruchomić mój projekt na command-line widzę

$ java -jar akkaio-remote/target/akka-remote-jar-with-dependencies.jar com.harit.akkaio.remote.RemoteApp 
Hello:com.harit.akkaio.remote.RemoteApp 
Exception in thread "main" com.typesafe.config.ConfigException$Missing: No configuration setting found for key 'akka.version' 
    at com.typesafe.config.impl.SimpleConfig.findKey(SimpleConfig.java:124) 
    at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:145) 
    at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:151) 
    at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:159) 
    at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:164) 
    at com.typesafe.config.impl.SimpleConfig.getString(SimpleConfig.java:206) 
    at akka.actor.ActorSystem$Settings.<init>(ActorSystem.scala:169) 
    at akka.actor.ActorSystemImpl.<init>(ActorSystem.scala:505) 
    at akka.actor.ActorSystem$.apply(ActorSystem.scala:142) 
    at akka.actor.ActorSystem$.apply(ActorSystem.scala:119) 
    at com.harit.akkaio.remote.RemoteApp$.startProcessingActorSystem(RemoteApp.scala:16) 
    at com.harit.akkaio.remote.RemoteApp$.main(RemoteApp.scala:12) 
    at com.harit.akkaio.remote.RemoteApp.main(RemoteApp.scala) 

RemoteApp.scala

package com.harit.akkaio.remote 

import akka.actor.{ActorRef, ActorSystem, Props} 
import com.typesafe.config.ConfigFactory 

import scala.concurrent.duration._ 

object RemoteApp { 
    def main(args: Array[String]): Unit = { 
    println("Hello:" + args.head) 
     startProcessingActorSystem() 
    } 

    def startProcessingActorSystem() = { 
    val system = ActorSystem("ProcessingSystem", ConfigFactory.load()) 
    println("ProcessingActorSystem Started") 
    } 
} 

ProcessingActor.scala

package com.harit.akkaio.remote 

import akka.actor.{Actor, ActorLogging} 

case object Process 

case object Crash 

class ProcessingActor extends Actor with ActorLogging { 
    def receive = { 
    case Process => log.info("processing big things") 
    case Crash => log.info("crashing the system") 
     context.stop(self) 
    } 
} 

application.conf

akka { 
    remote.netty.tcp.port = 2552 
} 

mymodule.pom.xml

<?xml version="1.0" encoding="UTF-8"?> 
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <parent> 
     <artifactId>akkaio</artifactId> 
     <groupId>com.harit</groupId> 
     <version>1.0-SNAPSHOT</version> 
    </parent> 
    <modelVersion>4.0.0</modelVersion> 

    <artifactId>akkaio-remote</artifactId> 

    <properties> 
     <akka-remote_2.11.version>2.3.11</akka-remote_2.11.version> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>com.typesafe.akka</groupId> 
      <artifactId>akka-remote_2.11</artifactId> 
      <version>${akka-remote_2.11.version}</version> 
     </dependency> 
    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <artifactId>maven-assembly-plugin</artifactId> 
       <configuration> 
        <finalName>akka-remote</finalName> 
        <archive> 
         <manifest> 
          <mainClass>com.harit.akkaio.remote.RemoteApp</mainClass> 
         </manifest> 
        </archive> 
        <descriptorRefs> 
         <descriptorRef>jar-with-dependencies</descriptorRef> 
        </descriptorRefs> 
       </configuration> 
       <executions> 
        <execution> 
         <id>make-assembly</id> <!-- this is used for inheritance merges --> 
         <phase>package</phase> <!-- bind to the packaging phase --> 
         <goals> 
          <goal>single</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

pom.xml

<?xml version="1.0" encoding="UTF-8"?> 
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.harit</groupId> 
    <artifactId>akkaio</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <modules> 
     <module>akkaio-remote</module> 
    </modules> 

    <packaging>pom</packaging> 
    <inceptionYear>2015</inceptionYear> 
    <properties> 
     <scala.version>2.11.6</scala.version> 
     <junit.version>4.12</junit.version> 
     <scalatest_2.11.version>2.2.5</scalatest_2.11.version> 
     <akka-actor_2.11.version>2.3.11</akka-actor_2.11.version> 
     <akka-slf4j_2.11.version>2.3.11</akka-slf4j_2.11.version> 
     <akka-testkit_2.11.version>2.3.11</akka-testkit_2.11.version> 
     <mockito-all.version>1.10.19</mockito-all.version> 
     <maven-scala-plugin.scalaCompatVersion>2.11.6</maven-scala-plugin.scalaCompatVersion> 
     <scalatest-maven-plugin.version>1.0</scalatest-maven-plugin.version> 
    </properties> 

    <repositories> 
     <repository> 
      <id>scala-tools.org</id> 
      <name>Scala-Tools Maven2 Repository</name> 
      <url>http://scala-tools.org/repo-releases</url> 
     </repository> 
    </repositories> 

    <pluginRepositories> 
     <pluginRepository> 
      <id>scala-tools.org</id> 
      <name>Scala-Tools Maven2 Repository</name> 
      <url>http://scala-tools.org/repo-releases</url> 
     </pluginRepository> 
    </pluginRepositories> 

    <dependencies> 
     <dependency> 
      <groupId>org.scala-lang</groupId> 
      <artifactId>scala-library</artifactId> 
      <version>${scala.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>com.typesafe.akka</groupId> 
      <artifactId>akka-actor_2.11</artifactId> 
      <version>${akka-actor_2.11.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>com.typesafe.akka</groupId> 
      <artifactId>akka-slf4j_2.11</artifactId> 
      <version>${akka-slf4j_2.11.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.scalatest</groupId> 
      <artifactId>scalatest-maven-plugin</artifactId> 
      <version>${scalatest-maven-plugin.version}</version> 
      <scope>compile</scope> 
     </dependency> 
     <dependency> 
      <groupId>com.typesafe.akka</groupId> 
      <artifactId>akka-testkit_2.11</artifactId> 
      <version>${akka-testkit_2.11.version}</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.scalatest</groupId> 
      <artifactId>scalatest_2.11</artifactId> 
      <version>${scalatest_2.11.version}</version> 
      <scope>test</scope> 
     </dependency> 
    </dependencies> 

    <build> 
     <defaultGoal>clean install</defaultGoal> 
     <plugins> 
      <plugin> 
       <groupId>org.scala-tools</groupId> 
       <artifactId>maven-scala-plugin</artifactId> 
       <executions> 
        <execution> 
         <goals> 
          <goal>compile</goal> 
          <goal>testCompile</goal> 
         </goals> 
        </execution> 
       </executions> 
       <configuration> 
        <scalaCompatVersion>${maven-scala-plugin.scalaCompatVersion}</scalaCompatVersion> 
        <scalaVersion>${scala.version}</scalaVersion> 
        <scalaVersion>${scala.version}</scalaVersion> 
        <args> 
         <arg>-target:jvm-1.8</arg> 
        </args> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-surefire-plugin</artifactId> 
       <version>2.7</version> 
       <configuration> 
        <skipTests>true</skipTests> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.scalatest</groupId> 
       <artifactId>scalatest-maven-plugin</artifactId> 
       <version>1.0</version> 
       <configuration> 
        <reportsDirectory>${project.build.directory}/surefire-reports</reportsDirectory> 
        <junitxml>.</junitxml> 
        <filereports>WDF TestSuite.txt</filereports> 
       </configuration> 
       <executions> 
        <execution> 
         <id>test</id> 
         <goals> 
          <goal>test</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 
    <reporting> 
     <plugins> 
      <plugin> 
       <groupId>org.scala-tools</groupId> 
       <artifactId>maven-scala-plugin</artifactId> 
       <configuration> 
        <scalaVersion>${scala.version}</scalaVersion> 
       </configuration> 
      </plugin> 
     </plugins> 
    </reporting> 
</project> 

Co mam brakuje? Dzięki

Odpowiedz

22

Wydaje się, że problem jest łączenie w jar-with-dependencies, co powoduje problemy z Akka, jak opisano w documentation:

Ostrzeżenie

podejście konfiguracja Akka w dużej mierze opiera się na założeniu, każdego modułu/słoika posiadającego własny plik reference.conf, wszystkie zostaną wykryte przez konfigurację i załadowane. Niestety oznacza to również, że jeśli umieścisz/scalisz wiele słoików w tym samym słoiku, musisz scalić także wszystkie pliki reference.confs. W przeciwnym razie wszystkie wartości domyślne zostaną utracone, a Akka nie będzie działać.

Jak sugerowano na tej samej stronie, można użyć maven-shade-plugin scalić wszystkie konfiguracje referencyjne:

Jeśli używasz Maven do pakietu aplikacji, można również skorzystać z Shade Apache Maven Obsługa wtyczek dla Transformatorów zasobów w celu scalenia wszystkich plików reference.conf na ścieżce klas kompilacji w jeden.

Zobacz także: Akka: missing akka.version

+0

Czy konieczne jest jawne dodanie pliku reference.conf do projektu? – Marin

23

Miał simular problem:

com.typesafe.config.ConfigException$Missing: 
No configuration setting found for key 'akka.persistence.journal-plugin-fallback' 

rozwiązać go z dodaniem dołączanie Transformers:

<plugin> 
    <artifactId>maven-shade-plugin</artifactId> 
    <version>2.4.1</version> 
    <executions> 
    <execution> 
     <phase>package</phase> 
     <goals> 
     <goal>shade</goal> 
     </goals> 
     <configuration> 
     <transformers> 
      <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> 
      <resource>reference.conf</resource> 
      </transformer> 
     </transformers> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 
+1

dziękuję, ty transformator pracował dla mnie również. –

+4

Twoja wtyczka wciąż daje mi "Nie znaleziono ustawienia konfiguracji dla klucza" akka.version ", podobnie jak wtyczka w dokumentach akka. –

0

Dodawanie AppendingTransformer sam nie rozwiąże problemu dla mnie. Jeśli próbujesz wdrożyć swoją aplikację iskrową na EMR i nadal napotykasz ten problem, zapoznaj się z moim rozwiązaniem here. Mam nadzieję, że to pomoże!