我正在为我的Play/Scala/Akka应用程序手动构建类路径,这样我就可以在CI管道的不同阶段使用ScalaTest运行程序来测试我的应用程序,而不需要重新编译。但是,我得到以下错误:
java.lang.NullPointerException:
at com.typesafe.config.impl.Parseable$ParseableResources.rawParseValue(Parseable.java:509)
at com.typesafe.config.impl.Parseable$ParseableResources.rawParseValue(Parseable.java:492)
at com.typesafe.config.impl.Parseable.parseValue(Parseable.java:171)
at com.typesafe.config.impl.Parseable.parseValue(Parseable.java:165)
at com.typesafe.config.impl.Parseable.parse(Parseable.java:204)
at com.typesafe.config.impl.ConfigImpl$1.call(ConfigImpl.java:368)
at com.typesafe.config.impl.ConfigImpl$1.call(ConfigImpl.java:365)
at com.typesafe.config.impl.ConfigImpl$LoaderCache.getOrElseUpdate(ConfigImpl.java:58)
at com.typesafe.config.impl.ConfigImpl.computeCachedConfig(ConfigImpl.java:86)
at com.typesafe.config.impl.ConfigImpl.defaultReference(ConfigImpl.java:365)下面是我正在运行的命令:
/usr/lib/jvm/java-7-openjdk//bin/java -Xmx256M -Xms32M -Xbootclasspath/a:$BOOTCP -classpath '""' -Dscala.home=/usr/opt/scala -Dscala.usejavacp=true -jar /home/nick/repos/testrunnnertest/lib/scalatest.jar -R target/scala-2.10/test-classes -o $BOOTCP的值是大量依赖项列表,包括应用程序jars、.ivy2中的依赖项和包含配置文件的文件夹(/conf,/test/resources)。我从shell脚本中复制了这个命令。我还将$BOOTCP的值用作-classpath的值,但仍然存在相同的问题。
这个问题只有在我运行我的验收测试时才会发生,这些测试正在旋转一个Play。因此,加载主应用程序信任的/conf似乎是一个问题,而不是在单元和集成测试愉快运行时加载查找的/test/resources信任。
发布于 2014-03-26 20:04:40
很晚才问到这个问题,但你想过吗?您的类路径上有哪个类型的配置版本?
主服务器上的第509行看起来不太合适:https://github.com/typesafehub/config/blob/master/config/src/main/java/com/typesafe/config/impl/Parseable.java#L509
因此,您可能有一个略有不同来源的版本。
版本1.0.2行509看起来可能更有可能:https://github.com/typesafehub/config/blob/v1.0.2/config/src/main/java/com/typesafe/config/impl/Parseable.java#L509
我想,在这一行中,类加载器很可能是空的?它应该来自于跟踪:https://github.com/typesafehub/config/blob/v1.0.2/config/src/main/java/com/typesafe/config/impl/ConfigImpl.java#L365,这反过来来自:https://github.com/typesafehub/config/blob/v1.0.2/config/src/main/java/com/typesafe/config/ConfigFactory.java#L380
因此,一种理论是,在抛出异常的情况下,线程没有设置上下文类加载器。如果是的话,我不能告诉你为什么在你的场景中是这样的,但也许它是一个线索。
我认为typesafe配置在任何情况下都不应该抛出NPE,所以我创建了https://github.com/typesafehub/config/issues/155来解决这个问题。但是,最有可能的是,线程上下文类加载器为null和/或如何设置线程上下文类加载器,并且没有向ConfigFactory方法提供其他类加载程序。
这是假设NPE来自空类加载器,我不认为这是问题所在,但从堆栈跟踪来看似乎是合理的。
https://stackoverflow.com/questions/22300105
复制相似问题