Ao adicionar dependências ao meu projeto, nunca tenho certeza de qual prefixo devo dar a elas, por exemplo, "classpath"
ou"compile".
Por exemplo, minhas dependências abaixo devem ser o tempo de compilação ou o classpath?
Além disso, isso deve estar em meus aplicativos build.gradle ou no build.gradle específico do módulo ?
Build.gradle atual (no nível do aplicativo):
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
fonte
fonte
classpath
não é um escopo de dependência válido.compileOnly
dependências vão para,project.configurations.compileClasspath
mas não vãoproject.configurations.compile
, conforme mencionado aqui github.com/iboyko/gradle-plugins/issues/5Respostas:
Vou supor que você está fazendo referência
compile
eclasspath
dentro dodependencies {}
bloco. Se for assim, essas são configurações de dependência .A
compile
configuração é criada pelo plugin Java. Aclasspath
configuração é comumente vista nobuildSrc {}
bloco onde é preciso declarar dependências para o próprio build.gradle (para plug-ins, talvez).fonte
dependencies {}
bloco pode ser declarado dentrobuildscript {}
e fora dele. Quando dentro, você usa aclasspath
configuração de dependências necessárias para compilar o próprio script de construção.Se o próprio buildscript precisar de algo para ser executado, use o classpath .
Se o seu projeto precisa de algo para ser executado, use compilar .
O
buildscript{}
bloco é para o próprio build.gradle.Para a construção de vários projetos, o arquivo de construção de nível superior é para o projeto raiz, o arquivo de construção específico é para o subprojeto (módulo).
Arquivo de construção de nível superior onde você pode adicionar opções de configuração comuns a todos os subprojetos / módulos.
Não coloque as dependências de seu aplicativo no arquivo de construção de nível superior, elas pertencem aos arquivos individuais do módulo build.gradle
fonte
compile
e não umclasspath
?Se bem entendi, você está confundindo
Project.dependencies
bloco de script com oProject.buildscript.dependencies
bloco de script (assim como fiz quando cheguei a esta questão).Vou tentar responder com o que descobri.
Acho que você já deve estar familiarizado com o
Project.dependencies
bloco de script. Neste bloco, declaramos dependências que são exigidas por nosso código-fonte. Existem várias maneiras de declarar uma dependência necessária para o projeto. Consulte o Tutorial do Gradle: tipos de dependência . Mencionarei apenas a parte mais relevante para este problema:compile 'org.hibernate:hibernate-core:5.0.5.Final'
é uma declaração de dependência do módulo. A configuração de compilação (que agora está obsoleta pela configuração de implementação.) É meramente uma palavra-chave paraImplementation only dependencies.
Não é uma palavra-chave que descreve qual tipo de dependência é (por tipo aqui estou seguindo os três tipos definidos no tutorial, ou seja, módulo, arquivo e projeto.)No Tutorial do Gradle: Organizando a lógica de compilação , diz:
Espero que as coisas estejam ficando claras para você agora.
Com
classpath "com.android.tools.build:gradle:${Versions.android_gradle_plugin}"
estamos definindo oclasspath
método com ocom.android.tools.build:gradle:${Versions.android_gradle_plugin}
qual é uma dependência de módulo que é usada pelo próprio script de construção, em vez da fonte em seu projeto.Por outro lado,
compile 'org.hibernate:hibernate-core:5.0.5.Final'
estamos declarando uma dependência de módulo necessária para seu projeto com a configuração de compilação .tl; dr: A
classpath
,compile
, eimplementation
são todas as palavras-chave que podem ser utilizados contra as dependências sob diferentes circunstâncias. O primeiro é usado quando você deseja passar uma dependência para o script de construção, e o último é uma das configurações que você deseja declarar.fonte
'org.projectlombok:lombok:1.18.4'
não temclasspath
associação porque é um jar que só é necessário durante ojavac
tempo de compilação, mas não é necessário nojava
tempo de execução. Portanto, o uso correto é uma interação das palavras-chave definidas e do artefato. Isso significa que é necessário um conhecimento a priori.