2012-01-01 11 views
5

Tengo un plugin sbt (0.11.2) que necesita obtener una ruta a los archivos de texto dentro del complemento. ¿Cómo puedo hacer eso? baseDirectory, sourceDirectories, etc. se establecen en la base del proyecto que incluye el complemento, no la base del plugin en sí.¿Cómo obtiene un plugin sbt una ruta a un archivo en el complemento?

Me gustaría proporcionar un comando al usuario del complemento que extrae los valores predeterminados de un archivo ruby ​​dentro del complemento, y luego permite que el usuario del complemento anule esos valores predeterminados.

Respuesta

1

¿Por qué no utilizas el buen método antiguo de Java's Class.getResource o Class.getResourceAsStream? P.ej. de esta manera:

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 
    } 
    } 
} 
+0

No creo que eso ayude. Realmente necesito un camino hacia la raíz del complemento, ya sea un archivo jar o un directorio. Muchas cosas dentro del primer archivo contendrán muchas referencias a otras rutas relativas (es ruby), por lo que tener una transmisión no es útil, y copiar la transmisión tampoco es útil. –

+1

¿Qué es exactamente un camino? ¿No ayuda getClass.getResource? Eso devuelve una URL, p. archivo:/foo/bar. –

+0

Sí, tienes razón. Leí mal al documento y pensé que lo único que podía hacer era obtener un flujo. Terminé usando c.getProtectionDomain.getCodeSource.getLocation.getPath. –

Cuestiones relacionadas