Al agregar dependencias a mi proyecto, nunca estoy seguro de qué prefijo debo darles, por ejemplo, "classpath"
o"compile".
Por ejemplo, ¿mis dependencias a continuación deberían ser tiempo de compilación o classpath?
Además, ¿debería estar esto en mi aplicación build.gradle o en el módulo build.gradle específico?
Build.gradle actual (a nivel de aplicación):
apply plugin: 'java'
repositories {
mavenCentral()
}
dependencies {
compile 'org.hibernate:hibernate-core:5.0.5.Final'
compile 'mysql:mysql-connector-java:5.1.38'
}
java
gradle
dependencies
java123999
fuente
fuente
classpath
no es un ámbito de dependencia válido.compileOnly
dependencias van aproject.configurations.compileClasspath
pero no aproject.configurations.compile
, como se menciona aquí github.com/iboyko/gradle-plugins/issues/5Respuestas:
Supongo que estás haciendo referencia
compile
yclasspath
dentro deldependencies {}
bloque. Si es así, esas son configuraciones de dependencia .La
compile
configuración la crea el complemento de Java. Laclasspath
configuración se ve comúnmente en elbuildSrc {}
bloque donde se necesita declarar dependencias para build.gradle, en sí mismo (para complementos, quizás).fuente
dependencies {}
bloque puede declararse tanto dentrobuildscript {}
como fuera de él. Cuando está adentro, usa laclasspath
configuración de las dependencias necesarias para compilar el script de compilación.Si buildscript necesita algo para ejecutarse, use classpath .
Si su proyecto necesita algo para ejecutarse, use compile .
El
buildscript{}
bloque es para build.gradle en sí.Para la construcción de varios proyectos, el archivo de construcción de nivel superior es para el proyecto raíz, el archivo de construcción específico es para el subproyecto (módulo).
Archivo de compilación de nivel superior donde puede agregar opciones de configuración comunes a todos los subproyectos / módulos.
No coloque las dependencias de su aplicación en el archivo de compilación de nivel superior, pertenecen a los archivos build.gradle del módulo individual
fuente
compile
y no aclasspath
?Si lo entiendo correctamente, está confundiendo el
Project.dependencies
bloque de secuencia de comandos con elProject.buildscript.dependencies
bloque de secuencia de comandos (como lo hice cuando llegué a esta pregunta).Intentaré responder a esto con lo que encontré.
Creo que ya debería estar familiarizado con el
Project.dependencies
bloque de script. En este bloque, declaramos las dependencias que requiere nuestro código fuente. Hay varias formas de declarar una dependencia que necesitamos para el proyecto. Consulte Tutorial de Gradle: tipos de dependencia . Solo mencionaré la parte que es más relevante para este problema:compile 'org.hibernate:hibernate-core:5.0.5.Final'
es una declaración de dependencia de módulo. La configuración de compilación (que ahora está desaprobada por la configuración de implementación) es simplemente una palabra clave paraImplementation only dependencies.
No es una palabra clave que describe qué tipo de dependencia es (por tipo aquí estoy siguiendo los tres tipos definidos en el tutorial, es decir, módulo, archivo y proyecto.)En Gradle Tutorial: Organizing Build Logic dice:
Espero que las cosas se le aclaren ahora.
Con
classpath "com.android.tools.build:gradle:${Versions.android_gradle_plugin}"
estamos configurando elclasspath
método con elcom.android.tools.build:gradle:${Versions.android_gradle_plugin}
cual es una dependencia de módulo que es utilizada por el propio script de compilación en lugar de la fuente en su proyecto.Por otro lado,
compile 'org.hibernate:hibernate-core:5.0.5.Final'
estamos declarando una dependencia de módulo requerida para su proyecto con la configuración de compilación .tl; dr: El
classpath
,compile
yimplementation
son todas las palabras clave que se pueden utilizar en contra de las dependencias en diferentes circunstancias. El primero se usa cuando desea pasar una dependencia al script de compilación, y el segundo es una de las configuraciones que puede querer declarar.fuente
'org.projectlombok:lombok:1.18.4'
no tieneclasspath
asociación porque es un jar que solo se necesita durante eljavac
tiempo de compilación, pero no durante eljava
tiempo de ejecución. Por lo tanto, el uso correcto es una interacción de las palabras clave definidas y el artefacto. Esto significa que se necesita un conocimiento a priori.