私は同じフォルダに格納されたプロパティファイルを使って制御したいグルーヴィースクリプトを書いています。しかし、どこからでもこのスクリプトを呼び出せるようにしたい。スクリプトを実行すると、スクリプトの場所ではなく、実行される場所に基づいて常にプロパティファイルが検索されます。実行スクリプトのパスをgroovyでどのように取得しますか?
スクリプト内からスクリプトファイルのパスにアクセスするにはどうすればよいですか?
私は同じフォルダに格納されたプロパティファイルを使って制御したいグルーヴィースクリプトを書いています。しかし、どこからでもこのスクリプトを呼び出せるようにしたい。スクリプトを実行すると、スクリプトの場所ではなく、実行される場所に基づいて常にプロパティファイルが検索されます。実行スクリプトのパスをgroovyでどのように取得しますか?
スクリプト内からスクリプトファイルのパスにアクセスするにはどうすればよいですか?
new File(".").getCanonicalPath()
は正しく動作しません。これにより、作業ディレクトリが返されます。
scriptFile = getClass().protectionDomain.codeSource.location.path
に取得するには、スクリプトディレクトリ
scriptDir = new File(getClass().protectionDomain.codeSource.location.path).parent
を取得するには少し紛らわしい、IMO。回避策は次のとおりです。https://issues.apache.org/jira/browse/GROOVY-1642
基本的には、startGroovy.shを変更して環境変数としてGroovyスクリプトの場所を渡します。
Gradleのユーザーのために
私はGradleので動作するように始めているとき、私は同じ問題を持っています。私は遠隔の倹約コンパイラ(私の会社のカスタム)によって私の倹約をコンパイルしたい。
task compileThrift {
doLast {
def projectLocation = projectDir.getAbsolutePath(); // HERE is what you've been looking for.
ssh.run {
session(remotes.compilerServer) {
// Delete existing thrift file.
cleanGeneratedFiles()
new File("$projectLocation/thrift/").eachFile() { f ->
def fileName=f.getName()
if(f.absolutePath.endsWith(".thrift")){
put from: f, into: "$compilerLocation/$fileName"
}
}
execute "mkdir -p $compilerLocation/gen-java"
def compileResult = execute "bash $compilerLocation/genjar $serviceName", logging: 'stdout', pty: true
assert compileResult.contains('SUCCESSFUL')
get from: "$compilerLocation/$serviceName" + '.jar', into: "$projectLocation/libs/"
}
}
}
}
興味深い:以下
は、私は私の問題を解決する方法です。それは私が期待したように動作しません。しかし、それはガントからガントスクリプトを実行しているという事実によるものです。だから、codeSourceは実際にgantがどこにあり、私のスクリプトがどこにあるのかわからない。 –
私のためには機能しません。 'getClass()。protectionDomain.codeSource'はnullを返します。私はGroovy 2.0.1を使用しています。 – quux00
Groovy 1.8.5でも(ウィンドウ上で)動作しません – Fels