2015-11-12 1 views
0

J'ai un projet Scala avec de nombreuses dépendances. L'un d'eux nécessite un paramètre qui n'est pas dans son propre application.conf, mais dans le fichier application.conf d'une autre dépendance. Lorsque j'exécute le projet avec sbt run tout va bien, cependant, quand j'exécute un service deb packagé ou un script bin de target/universal/stage/bin, j'obtiens une erreur: com.typesafe.config.ConfigException$Missing: No configuration setting found for key 'roadmaps'. Deux dépendances ont ce paramètre dans application.conf dans leurs bocaux. Lorsque j'ai déplacé le paramètre de application.conf dans reference.conf et publié de nouveau la dépendance, puis ré-emballé mon projet, la version empaquetée a fonctionné. Alors pourquoi mon paramètre n'est pas récupéré depuis application.conf dans le fichier jar de la dépendance et pourquoi devrais-je conserver la configuration de la bibliothèque dans reference.conf, en plus du fait qu'il a la plus faible priorité parmi les fichiers de configuration?La dépendance du projet packagé sbt-native-packager ne parvient pas à trouver la valeur de configuration

+0

Pouvez-vous donner un 'build.sbt' minimal reproduisant ceci? Cela ressemble plus à un problème de configuration (si une clé de configuration est manquante). Checkout https://github.com/typesafehub/config et déboguer votre configuration pour voir où les clés manquantes viennent si vous démarrez votre application avec 'sbt run'. – Muki

+0

J'ai cette clé 'roadmaps' dans application.conf dans deux jars avec des dépendances (c'est la même chose dans les deux fichiers). Pourquoi n'est-il pas récupéré par un service packagé? – Yar

+0

Plusieurs 'application.conf' peuvent être chargés différemment pendant l'exécution. Déboguez la configuration de typesafe quand et où les choses sont chargées. – Muki

Répondre

1

-Dconfig.trace=loads m'a aidé à trouver une réponse. Quand je sbt run un projet qui dependsOn autres projets, il charge d'abord ses propres application.conf, puis ceux empaquetés dans des jars de ses dépendances directes (c'est de là que vient 'roadmaps'), puis reference.conf s des dépendances. Lorsque j'ajoute bashScriptExtraDefines += """addJava "-Dconfig.file=${app_home}/../conf/application.conf"""" dans build.sbt, empaquetez le projet avec stage et exécutez-le à partir du script dans target/universal/stage/bin, il charge uniquement le application.conf spécifié puis passe à reference.conf s.