5
我有一个sbt(0.11.2)插件需要获取插件内部文本文件的路径。我怎么做? baseDirectory,sourceDirectories等设置为包含插件的项目的基础,而不是插件本身的基础。sbt插件如何获取插件中文件的路径?
我想提供一个命令给插件用户,从插件里面的ruby文件中提取默认值,然后允许插件用户覆盖这些默认值。
我有一个sbt(0.11.2)插件需要获取插件内部文本文件的路径。我怎么做? baseDirectory,sourceDirectories等设置为包含插件的项目的基础,而不是插件本身的基础。sbt插件如何获取插件中文件的路径?
我想提供一个命令给插件用户,从插件里面的ruby文件中提取默认值,然后允许插件用户覆盖这些默认值。
为什么不使用好的旧Java的Class.getResource或Class.getResourceAsStream方法?例如。像这样:
object TestPlugin extends Plugin {
override def settings = super.settings ++ Seq(
commands += testCommand
)
def testCommand = Command.command("test")(action)
def action(state: State) = {
try {
val in = getClass.getResourceAsStream("/test.txt")
val text = Source.fromInputStream(in).getLines mkString System.getProperty("line.separator")
logger(state).info(text)
in.close()
state
} catch {
case e: Exception =>
logger(state).error(e.getMessage)
state.fail
}
}
}
我不认为这有帮助。我确实需要一个到插件根目录的路径,无论它是一个jar还是一个目录。第一个文件中的很多内容都会包含许多对其他相对路径的引用(它是ruby),因此拥有一个流是没有用的,而将流拷出也是没有用的。 – 2012-01-02 16:48:27
路径究竟是什么?不会getClass.getResource帮助?这返回一个URL,例如文件:/富/酒吧。 – 2012-01-12 15:29:12
是的,你是对的。我误解了文档,并认为我唯一能做的就是获得一个流。我结束了使用c.getProtectionDomain.getCodeSource.getLocation.getPath。 – 2012-01-19 02:15:49