有没有办法在运行时从这个类的代码确定已执行类的当前文件系统位置,因为它是使用java命令执行的?
例如,对于以下类:
public class MyClass{
public static void main(String[] args){\
new MyClass().doStuff();
}
private void doStufF(){
String path = ... // what to do here?!
System.out.println("Path of class being invoked: " + path);
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法在调用MyClass.class文件的文件系统中获取和打印正确的路径?
同样,如果我从java -jar命令调用jar文件,有没有办法从该jar内的类中获取jar文件的路径?
PS:请不要做任何假设有关工作目录从java被调用的命令!
我有一个小脚本,我正在使用一个参数来传递当前的执行目录,但是想让它更健壮一点.
如何找到基本执行目录?
我正在写一个插件,我正在尝试在插件的根目录或已安装的目录中编写一个文件(不知道该引用什么).我似乎无法弄清楚如何掌握这个价值.执行System.properties['base.dir']将导致实现Grails项目的根目录.所以现在我有两个目录:
C:/ PluginProject /
C:/ GrailsAppThatUsesPlugin /
我的理解是,当它成为分布式插件时,用户同样会有两个目录:
GRAILS_HOME/Grails的版本/项目/项目名称/插件/为myplugin /
C:/ GrailsAppThatUsesPlugin /
在我的插件项目中,我需要创建一个文件.它需要在我的插件中,因为我正在编写的文件需要引用我的插件提供的其他文件.我尝试过的一些没用的东西是:
System.properties['base.dir'] new File("")pluginNamePluginDir但我试图从POGO访问它.System.properties这些都没有插件目录任何帮助是极大的赞赏.
我需要在运行时检索 Groovy 2.3 中脚本文件的完整路径。实际上,我遇到了与此处描述的问题相同的问题:在运行时获取 groovy 源文件的路径。
我的脚本是否可以从 GroovyShell 执行。
我的脚本位于:
C:\users\myname\documents\scripts\myscript.groovy
Run Code Online (Sandbox Code Playgroud)
=> 我只是想在运行时检索此路径。
如果我使用被接受的解决方案:
println new File(".").absolutePath
Run Code Online (Sandbox Code Playgroud)
我得到的实际上是:
C:\groovy-2.3.7\.
Run Code Online (Sandbox Code Playgroud)
这是 groovy 主文件夹。那是不正确的。另一个建议的答案即:
URL scriptUrl = getClass().classLoader.resourceLoader.loadGroovySource(getClass().name)
Run Code Online (Sandbox Code Playgroud)
仅当我的脚本位于类路径中时,或者在 groovy 启动时使用 groovy-starter.conf 中的 load 指令加载它时才有效。否则返回空值。我可以使用这种方法,但它并不令人满意,因为它就像传递一个参数,这里的目标是用户无需修改或配置即可从任何地方执行脚本。
解决方案似乎使用为此目的创建的@SourceURI 注释。问题是我无法让它工作。我尝试执行如下所示的代码用法:SourceURI
@groovy.transform.SourceURI def sourceURI
assert sourceURI instanceof java.net.URI
path = sourceURI.toString()
println "path = $path"
Run Code Online (Sandbox Code Playgroud)
我得到的是(groovy 2.3.7)不是路径而是源代码:
path = data:,@groovy.transform.SourceURI%20def%20sourceURI%0A%0A%20assert%20sourceURI%20instanceof%20java.net.URI%0Apath%20=%20sourceURI.toString()%0Aprintln%20%22path%20=%20$path%22
Run Code Online (Sandbox Code Playgroud)
如何使用@SourceURI 注解来检索脚本文件的路径?
给定以下目录结构:
/home/some/random/foler/myScript.grooy
Run Code Online (Sandbox Code Playgroud)
...如何在脚本本身中以编程方式获取myScript.grooy父目录的路径?
最终我试图从脚本所在的同一目录中读取几个文件.
编辑:尝试在Windows 7,Groovy 2.0.1,groovy控制台上运行它