tutorial - Gradle: obtener la ruta del directorio del proyecto raíz al comenzar con un archivo de compilación personalizado
spring gradle (3)
En el archivo build.gradle solo use projectDir
para obtener la ruta absoluta del archivo build.gradle. Desde allí puedes navegar los archivos de tu proyecto. Lea esto para más información:
https://www.tutorialspoint.com/gradle/gradle_build_script.htm
La estructura de mi proyecto Gradle es la siguiente:
Project
├── app
└── build.gradle
├── foo
└── bar.txt
·
·
·
└── build.gradle
Normalmente, para obtener la ruta de acceso absoluta de la carpeta foo
simplemente puedo new File(''foo'').getAbsolutePath()
en el archivo root build.gradle
.
Pero, lamentablemente, esto no funciona si ejecuta el script de gradle desde fuera del directorio del proyecto, por ejemplo, haciendo algo como esto:
$ trunk/gradlew -b trunk/build.gradle tasks
Con el comando anterior, gradle está buscando el directorio foo
en el padre del Proyecto, porque comencé el script desde allí.
¿Hay alguna forma de obtener la ruta absoluta del Proyecto donde está el build.gradle, incluso si inicia su secuencia de comandos desde otro directorio? ¿O hay alguna otra manera de obtener una referencia de un directorio en la misma carpeta donde está el script?
He intentado también con getClass().protectionDomain.codeSource.location.path
pero está devolviendo la ruta al directorio de caché de Gradle.
new File(''foo'')
por definición (mira su JavaDoc) crea una ruta en relación con el directorio de trabajo actual, por lo que depende de dónde se llame la aplicación. Si desea una ruta relativa a la carpeta del proyecto, use project.file(''foo'')
, o como project
es el valor predeterminado para resolver el método solo file(''foo'')
y obtiene la ruta relativa resuelta en el directorio del proyecto, no el directorio de trabajo. Así que usa file(''foo'').absolutePath
y estarás bien.
userDir
este problema asegurándome de que Java userDir
se configuró en el directorio del proyecto (es decir, project.projectDir
) en la parte superior de mi archivo build.gradle
, de la siguiente manera:
System.setProperty( "user.dir", project.projectDir.toString() )
println " project dir: "+ System.getProperty("user.dir");
Esto se puede verificar ejecutando un archivo de código (Groovy) separado como:
println "User Dir: ${System.getProperty( ''user.dir'' )}"
Puede generar los valores del proyecto Gradle antes y después de usar estas declaraciones.
println "Root project: ${project.rootProject}";
println " rootDir: ${project.rootDir}"
println " projectDir: ${project.projectDir}";
println " project dir: ${System.getProperty("user.dir")}";
Si tiene subproyectos, projectDir
no es lo mismo que rootDir
.
Esto no ha solucionado mi problema real , pero ha asegurado que estoy abriendo el archivo correcto (en relación con la ubicación de build.gradle
.