Comment obtenir le chemin du script de course à pied dans groovy?
j'écris un script groovy que je veux contrôler via un fichier de propriétés stocké dans le même dossier. Cependant, je veux pouvoir appeler ce script de n'importe où. Lorsque je lance le script, il cherche toujours le fichier de propriétés sur la base d'où il est exécuté à partir, non pas du script.
Comment puis-je accéder au chemin d'accès du fichier script depuis l'intérieur du script?
4 réponses
à partir de Groovy 2.3.0 l'annotation @groovy.transform.SourceURI
peut être utilisée pour peupler une variable avec L'URI de l'emplacement du script. Cette URI peut ensuite être utilisée pour obtenir le chemin vers le script:
import groovy.transform.SourceURI
import java.nio.file.Path
import java.nio.file.Paths
@SourceURI
URI sourceUri
Path scriptLocation = Paths.get(sourceUri)
vous avez raison que new File(".").getCanonicalPath()
ne fonctionne pas. Qui renvoie le répertoire de travail .
pour obtenir le répertoire de script
scriptDir = new File(getClass().protectionDomain.codeSource.location.path).parent
pour obtenir le chemin du fichier de script
scriptFile = getClass().protectionDomain.codeSource.location.path
cela a du sens si vous utilisez le Groovy code comme un script , sinon toute l'idée devient un peu confuse, IMO. La solution est ici: https://issues.apache.org/jira/browse/GROOVY-1642
fondamentalement, cela implique de changer startGroovy.sh pour passer dans l'emplacement du script Groovy comme variable d'environnement.
For grad use
j'ai le même problème quand je commence à travailler avec gradle. Je veux compiler mon thrift par le compilateur de thrift distant (personnalisé par mon entreprise).
Voici comment j'ai résolu mon problème:
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/"
}
}
}
}