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

classpathno es un ámbito de dependencia válido.compileOnlydependencias van aproject.configurations.compileClasspathpero no aproject.configurations.compile, como se menciona aquí github.com/iboyko/gradle-plugins/issues/5Respuestas:
Supongo que estás haciendo referencia
compileyclasspathdentro deldependencies {}bloque. Si es así, esas son configuraciones de dependencia .La
compileconfiguración la crea el complemento de Java. Laclasspathconfiguració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 laclasspathconfiguració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
compiley no aclasspath?Si lo entiendo correctamente, está confundiendo el
Project.dependenciesbloque de secuencia de comandos con elProject.buildscript.dependenciesbloque 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.dependenciesbloque 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 elclasspathmé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,compileyimplementationson 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 tieneclasspathasociación porque es un jar que solo se necesita durante eljavactiempo de compilación, pero no durante eljavatiempo 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.