2012-01-01 7 views
5

私は、プラグイン内のテキストファイルへのパスを取得する必要があるsbt(0.11.2)プラグインを持っています。それ、どうやったら出来るの? baseDirectory、sourceDirectoriesなどは、プラグイン自体のベースではなく、プラグインを含むプロジェクトのベースに設定されます。sbtプラグインはどのようにしてプラグイン内のファイルへのパスを取得しますか?

私は、プラグインの中のルビファイルからデフォルトを引っ張って、プラグインのユーザーがそれらのデフォルトを上書きできるようにするコマンドを、プラグインのユーザーに提供したいと考えています。

答えて

1

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

私はそれが役立つとは思わない。プラグインのルートへのパスが必要です。プラグインはjarかディレクトリかのどちらかです。最初のファイルの中には、他の相対パス(ルビー)への参照が多く含まれているため、ストリームを持つことは有用ではなく、ストリームをコピーすることも役に立ちません。 –

+1

パスは正確には何ですか? getClass.getResourceのヘルプを取得できませんでしたか? URLを返します。ファイル:/ foo/bar。 –

+0

はい、そうです。私は文書を誤解し、私ができる唯一のことはストリームを取得することだと思った。私はc.getProtectionDomain.getCodeSource.getLocation.getPathを使用して終了しました。 –

関連する問題