2016-08-02 1 views
2

J'utilise ficus et typesafe config pour gérer les configurations.Bibliothèque Typesafe config inutilisable dans la feuille de calcul Intellij Scala

Je veux utiliser la feuille de scala de Intellij dans ce projet, mais lorsque je tente le code suivant:

import what.ever.ApplicationSetting 

ApplicationSetting.aws.accessKey 

Cependant, je reçois l'erreur suivante:

java.lang.ExceptionInInitializerError 
    at some.thing.A$A11$A$A11.get$$instance$$res0(testRes.sc:3) 
    at #worksheet#.#worksheet#(testRes.sc:11) 
Caused by: com.typesafe.config.ConfigException$Missing: No configuration setting found for key 'aws' 
    at com.typesafe.config.impl.SimpleConfig.findKey(SimpleConfig.java:124) 
    at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:147) 
    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 net.ceedubs.ficus.readers.StringReader$$anon$1.read(StringReader.scala:7) 
    at net.ceedubs.ficus.readers.StringReader$$anon$1.read(StringReader.scala:6) 
    at what.ever.ApplicationSetting$$anon$1.read(ApplicationSetting.scala:24) 

Le contenu de application.conf est le suivant :

package what.ever 

import com.typesafe.config.ConfigFactory 
import net.ceedubs.ficus.Ficus._ 
import net.ceedubs.ficus.readers.ArbitraryTypeReader._ 

object ApplicationSetting { 

    val env = sys.env.getOrElse("DEV_ENV", "default") 
    val config = { 
    ConfigFactory.defaultOverrides 
     .withFallback(ConfigFactory.load(env)) 
     .withFallback(ConfigFactory.load) 
    } 

    case class AWS(accessKey: String, 
       secretKey: String) 

    val aws = config.as[AWS]("aws") 

} 

Je trouve cela étrange parce que le même code a fait travailler dans la console scala.

J'apprécierais toute suggestion.

Dans le cas où vous souhaitez tester la vérification du code cette repo.

Répondre

1

Une solution de contournement que j'ai trouvé était de charger le fichier de configuration d'une autre manière. Commencez par modifier le fichier de configuration en quelque chose comme myAppConf.conf afin d'éviter que les fichiers de configuration ne disparaissent des stratégies de fusion.

package what.ever 

import java.io.File 
import com.typesafe.config.ConfigFactory 
import net.ceedubs.ficus.Ficus._ 
import net.ceedubs.ficus.readers.ArbitraryTypeReader._ 

object ApplicationSetting { 

    val confPath = getClass.getResource("/myAppConf.conf") 
    val config = ConfigFactory.parseFile(new File(confPath.getPath)).resolve() 

    case class AWS(accessKey: String, 
       secretKey: String) 

    val aws = config.as[AWS]("aws") 

} 
+1

Je ne peux pas offrir beaucoup d'aide, mais parfois, quand je rencontre des problèmes avec des feuilles de calcul dans Intellij je vais à rempl ou [ammonite] (http://www.lihaoyi.com/Ammonite/#Ammonite-REPL) Ce dernier fournit une belle réplique améliorée et un moyen facile de charger les bibliothèques. – Barry

+1

Ammonite a encore du mal à ajouter des chemins de classes. Dans certains cas, cela ne peut donc pas être un remplacement. Le repl est OK cependant. – Vasco