Diferença entre configurações de compilação e tempo de execução no Gradle

102

Minha dúvida é um pouco comum, mas está ligada ao Gradle também.

Por que precisamos compilar e configurar o tempo de execução?

Quando eu compilo algo, preciso de artefatos para converter minhas classes java em bytecode, então preciso compilar a configuração, mas por que é necessária a configuração de tempo de execução? Preciso de outra coisa para executar meu aplicativo na JVM?

Desculpe se parece estúpido, mas eu não entendo.

Xelian
fonte

Respostas:

149

No caso mais comum, os artefatos necessários em tempo de compilação são um subconjunto daqueles necessários em tempo de execução. Por exemplo, digamos que um programa chamado appuse library fooe library foo internamente use library bar. Então, apenas fooé necessário compilar app, mas ambos fooe barsão necessários para executá-lo. É por isso que, por padrão, tudo o que você coloca na compileconfiguração do Gradle também fica visível em sua runtimeconfiguração, mas o contrário não é verdade.

Peter Niederwieser
fonte
20
É uma pena que isso não seja mencionado explicitamente em gradle.org/docs/current/userguide/dependency_management.html . Eles usam compilar e runtime sem declarar explicitamente seu significado ...
silasdavis
2
@silasdavis Na documentação explica a diferença: gradle.org/docs/current/userguide/… em 8.3. Configurações de dependência
angelcervera
@angelcervera Ah, sim, 8. Noções básicas de gerenciamento de dependências e 51. Gerenciamento de dependências. Eu posso ver por que eles têm duas seções, mas talvez fosse bom se a última referenciasse a primeira. Acho que pousei no 51 e esperava dar um relato completo.
silasdavis
@silasdavis True. O mesmo para outras seções da documentação. Devo tirar o mesmo tempo livre para ler toda a documentação de A a Z.
angelcervera
1
@Peter Niederwieser Se a tarefa de compilação mostrar as mesmas dependências do tempo de execução, em que cenário você usaria o tempo de execução em vez de compilar?
rj2700