2015-06-23 86 views
19

我學習阿卡,遠程,這是我的項目的外觀沒有配置設置發現鑰匙「akka.version」

項目結構看起來像

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 

當我command-line運行我的項目,我看到

$ 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> 

我缺少什麼呢? 感謝

回答

22

看來你的問題捆綁成jar-with-dependencies,這會導致問題,阿卡,如documentation描述:

警告

阿卡的配置方法在很大程度上依賴於概念每個模塊/ jar都有自己的reference.conf文件,所有這些都將被配置發現並加載。不幸的是,這也意味着如果您將多個jar放入/合併到同一個jar中,則還需要合併所有reference.conf。否則,所有默認設置都將丟失,Akka將無法使用。

由於在同一頁上的建議,您可以使用maven-shade-plugin合併所有的參考配置:

如果您正在使用Maven來打包應用程序,您還可以使用Apache Maven的色光資源轉換器的插件支持將構建類路徑上的所有reference.confs合併爲一個。

參見:Akka: missing akka.version

+0

是否需要明確將reference.conf添加到項目中? – Marin

23

有simular問題:

<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

謝謝,你的變壓器也適用於我。 –

+4

您的插件仍然給我'找不到關鍵'akka.version'的配置設置,就像akka文檔中的插件一樣。 –

0

添加AppendingTransformer單獨無法解決的問題:

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

與添加的附加變壓器解決它爲了我。 如果您試圖在EMR上部署您的Spark應用程序並仍然面臨此問題,請查看我的解決方案here。希望能幫助到你!

相關問題