你如何在groovy中获得正在运行的脚本的路径?

Dan*_*ard 65 groovy

我正在编写一个groovy脚本,我希望通过存储在同一文件夹中的属性文件来控制它.但是,我希望能够从任何地方调用此脚本.当我运行脚本时,它总是根据运行的位置查找属性文件,而不是脚本所在的位置.

如何从脚本中访问脚本文件的路径?

sea*_*and 76

你是对的new File(".").getCanonicalPath(),不行.返回工作目录.

获取脚本目录

scriptDir = new File(getClass().protectionDomain.codeSource.location.path).parent
Run Code Online (Sandbox Code Playgroud)

获取脚本文件路径

scriptFile = getClass().protectionDomain.codeSource.location.path
Run Code Online (Sandbox Code Playgroud)

  • 对我不起作用,返回`\ groovy`和`/ groovy/shell` (9认同)
  • 根据它的运行方式,我得到父/或正确目录的`/ groovy`.那怎么样:`getClass().getResource('/ $ {yourScript} .groovy')`这对我有用,假设你的脚本在类路径上 (3认同)
  • @ quux00:尝试使用`MyClassName.class.protectionDomain.codeSource`(参考http://stackoverflow.com/questions/11747833/getting-filesystem-path-of-class-being-executed) (2认同)

Jos*_*vis 11

如果您将Groovy代码作为脚本运行,这是有道理的,否则整个想法会有点混乱,IMO.解决方法如下:https://issues.apache.org/jira/browse/GROOVY-1642

基本上这涉及更改startGroovy.sh以将Groovy脚本的位置作为环境变量传递.


M. *_*tin 11

从Groovy 2.3.0开始,@groovy.transform.SourceURI注释可用于使用脚本位置的URI填充变量.然后可以使用此URI获取脚本的路径:

import groovy.transform.SourceURI
import java.nio.file.Path
import java.nio.file.Paths

@SourceURI
URI sourceUri

Path scriptLocation = Paths.get(sourceUri)
Run Code Online (Sandbox Code Playgroud)

  • `java.nio.file.FileSystemNotFoundException:未安装提供程序“数据”` (3认同)