La structure de mon projet Gradle est la suivante:
Project
├── app
└── build.gradle
├── foo
└── bar.txt
·
·
·
└── build.gradle
Normalement, pour obtenir le chemin absolu du dossier foo
, je peux simplement faire new File('foo').getAbsolutePath()
dans le fichier racine build.gradle
.
Mais cela ne fonctionnera malheureusement pas si vous exécutez le script gradle en dehors du répertoire du projet, par exemple en procédant de la manière suivante:
$ trunk/gradlew -b trunk/build.gradle tasks
Avec la commande précédente, gradle recherche le répertoire foo
dans le parent du projet, car j’ai lancé le script à partir de là.
Existe-t-il un moyen d'obtenir le chemin absolu du projet où se trouve build.gradle, même si vous démarrez votre script à partir d'un autre répertoire? Ou existe-t-il un autre moyen d'obtenir la référence d'un répertoire dans le même dossier que le script?
J'ai aussi essayé avec getClass().protectionDomain.codeSource.location.path
mais il renvoie le chemin d'accès au répertoire de cache de gradle.
new File('foo')
par définition (regardez son JavaDoc) crée un chemin relatif au répertoire de travail actuel, cela dépend donc de l'endroit où vous appelez l'application. Si vous voulez un chemin relatif au dossier du projet, utilisez project.file('foo')
ou project
est la valeur par défaut pour résoudre la méthode simplement file('foo')
et vous obtenez le chemin relatif résolu par rapport au répertoire du projet et non au répertoire de travail. Donc, utilisez file('foo').absolutePath
et tout ira bien.
J'ai résolu ce problème en m'assurant que Java userDir
était défini sur le répertoire project (i.e. project.projectDir
) en haut de mon fichier build.gradle
, comme suit:
System.setProperty( "user.dir", project.projectDir.toString() )
println " project dir: "+ System.getProperty("user.dir");
Cela peut être vérifié en exécutant un fichier de code séparé (Groovy) tel que:
println "User Dir: ${System.getProperty( 'user.dir' )}"
Vous pouvez générer les valeurs du projet Gradle avant et après l'utilisation de ces instructions.
println "Root project: ${project.rootProject}";
println " rootDir: ${project.rootDir}"
println " projectDir: ${project.projectDir}";
println " project dir: ${System.getProperty("user.dir")}";
Si vous avez des sous-projets, projectDir
n'est pas la même chose que rootDir
.
Cela n'a pas corrigé mon problème actuel mais cela m'a permis d'ouvrir le fichier correct (par rapport à l'emplacement de build.gradle
.
Dans le fichier build.gradle, utilisez simplement projectDir
pour obtenir le chemin absolu du fichier build.gradle. à partir de là, vous pouvez parcourir les fichiers de votre projet. lisez ceci pour plus d'infos:
https://www.tutorialspoint.com/gradle/gradle_build_script.htm