Na documentação de Gradle: https://docs.gradle.org/current/dsl/org.gradle.api.tasks.wrapper.Wrapper.html
Os scripts gerados por esta tarefa devem ser confirmados no seu sistema de controle de versão. Esta tarefa também gera um pequeno arquivo JAR de inicialização e um arquivo de propriedades gradle-wrapper.jar que também deve ser confirmado no seu VCS. Os scripts delegam a este JAR.
De: O que NÃO deve estar sob controle de origem?
Eu acho Generated files
que não deveria estar no VCS.
Quando são gradlew
e são gradle/gradle-wrapper.jar
necessários?
Por que não armazenar um gradle version
no build.gradle
arquivo?
version-control
gradle
farmer1992
fonte
fonte
Respostas:
Como o objetivo principal do wrapper gradle é poder, sem ter instalado o gradle e sem saber como ele funciona, de onde fazer o download, de qual versão, para clonar o projeto do VCS, para executar o script gradlew contém e para construir o projeto sem nenhuma etapa adicional.
Se tudo o que você tinha era um número de versão gradle em um arquivo build.gradle, você precisaria de um README explicando a todos que a versão X gradle deve ser baixada da URL Y e instalada, e você teria que fazer isso toda vez que a versão for incrementada.
fonte
O mesmo argumento vale para o JDK, você deseja confirmar isso também? Você também confirma todas as suas bibliotecas de dependência?
As dependências devem ser atualizadas continuamente à medida que novas versões são lançadas. Para obter segurança e outras correções de bugs. E porque se você ficar para trás, pode ser uma tarefa muito demorada se atualizar novamente.
Se o wrapper gradle for incrementado para cada nova versão e for confirmado, o repositório crescerá muito. O problema é óbvio ao trabalhar com VCS distribuído, em que um clone baixa todas as versões de tudo.
Crie um script de construção que faça o download do wrapper e use-o para construir. Todo mundo não precisa saber como o script funciona, eles precisam concordar que o projeto é construído executando-o.
E depois
Para baixar a versão correta.
Resolvido pelas etapas acima. O download do wrapper gradle não é diferente do download de outras dependências. O script pode ser inteligente o suficiente para verificar se há algum wrapper gradle atual e fazer o download apenas se houver uma nova versão.
Se o desenvolvedor nunca usou o Gradle antes e talvez não saiba que o projeto é construído com o Gradle. Então é mais óbvio executar um "build.sh" comparado com o "gradlew build".
Não, você não precisaria de um README. Você poderia ter um, mas somos desenvolvedores e devemos automatizar o máximo possível. Criar um script é melhor.
Se os desenvolvedores concordarem que o processo correto é:
Então, atualizar para o wrapper gradle mais recente não é problema. Se a versão for incrementada desde a última execução, o script poderá baixar a nova versão.
fonte
build.gradle
controle de versão e possui:task wrapper(type: Wrapper) { gradleVersion = 'X.X' }
Em seguidagradle wrapper
, baixará o wrapper que foi usado e você poderá reproduzir a compilação antiga.gradle wrapper
clone após cada compilação? Isso basicamente torna o invólucro inútil, porque o ponto principal é que você não precisa instalar o Gradle localmente para criar o projeto !Eu gostaria de recomendar uma abordagem simples.
No README do seu projeto, documente que uma etapa da instalação é necessária, a saber:
Isso funciona com o Gradle 2.4 ou superior. Isso cria um wrapper sem exigir que uma tarefa dedicada seja adicionada ao "build.gradle".
Com esta opção, ignore (não faça check-in) estes arquivos / pastas para controle de versão:
O principal benefício é que você não precisa fazer o check-in de um arquivo baixado para o controle de origem. Custa uma etapa extra na instalação. Eu acho que vale a pena.
fonte
gradlew
. @edio, você precisará baixar e usar uma versão específica do gradle.O que é o "projeto"?
Talvez haja uma definição técnica desse idioma que exclua os scripts de construção. Mas se aceitarmos essa definição, devemos dizer que seu "projeto" não é tudo o que você precisa para a versão!
Mas se dissermos "seu projeto" é tudo o que você fez . Então podemos dizer que você deve incluí- lo e somente ele no VCS.
Isso é muito teórico e talvez não seja prático no caso de nossos trabalhos de desenvolvimento. Então, alteramos para " seu projeto é todo arquivo (ou pasta) necessário para editá-los diretamente ".
"diretamente" significa "não indiretamente" e "indiretamente" significa editando outro arquivo e, em seguida, um efeito será refletido nesse arquivo .
Portanto, chegamos ao mesmo que o OP disse (e é dito aqui ):
Sim. Porque você não os criou. Portanto, eles não fazem parte do "seu projeto" de acordo com a segunda definição.
Qual é o resultado desses arquivos:
build.gradle : Sim. Precisamos editá-lo. Nossos trabalhos devem ser versionados.
Nota: Não há diferença em onde você o edita. Seja no seu ambiente de editor de texto ou no ambiente da GUI do Project Structure . Enfim, você está fazendo isso diretamente !
gradle-wrapper.properties : Sim. Precisamos pelo menos determinar a versão Gradle neste arquivo.
gradle-wrapper.jar e gradlew [.bat] : Eu não os criei ou editei em nenhum dos meus trabalhos de desenvolvimento até o momento! Então a resposta é "Não". Se você fez isso, a resposta é "Sim" sobre você nesse trabalho (e sobre o mesmo arquivo que você editou).
A observação importante sobre o caso mais recente é que o usuário que clona seu repositório precisa executar este comando nos repositórios
<root-directory>
para gerar automaticamente arquivos wrapper:$v
e$distType
são determinados em gradle-wrapper.properties :Consulte https://gradle.org/install/ para obter mais informações.
gradle
executável ébin/gradle[.bat]
na distribuição local. Não é necessário que a distribuição local seja a mesma que a determinada no repo. Após a criação dos arquivos wrapper , égradlew[.bat]
possível fazer o download da distribuição Gradle determinada automaticamente (se não existir localmente). Então ele / ela provavelmente deve gerar novamente os arquivos do wrapper usando o novogradle
executável (na distribuição baixada) usando as instruções acima.Nota: Nas instruções acima, o usuário deve ter pelo menos um distribuição Gradle localmente (por exemplo
~/.gradle/wrapper/dists/gradle-4.10-bin/bg6py687nqv2mbe6e1hdtk57h/gradle-4.10
). Abrange quase todos os casos reais. Mas o que acontece se o usuário ainda não tiver distribuição?Ele / ela pode fazer o download manualmente usando o URL no
.properties
arquivo. Mas se ele / ela não o localizar no caminho que o invólucro esperado, a embalagem vai baixá-lo novamente! O caminho esperado é completamente previsível, mas está fora do assunto (veja aqui a parte mais complexa).Existem também algumas maneiras mais fáceis (mas sujas). Por exemplo, ele / ela pode copiar arquivos de invólucro (exceto
.properties
arquivo) de qualquer outro repositório local / remoto para seu repositório e, em seguida, executargradlew
em seu repositório. Ele fará o download automático da distribuição adequada.fonte
De acordo com os documentos da Gradle ,
gradle-wrapper.jar
é esperado adicionar ao VCS, pois disponibilizar o Gradle Wrapper para desenvolvedores faz parte da abordagem da Gradle:fonte
Pergunta antiga, nova resposta. Se você não atualiza o gradle com frequência (a maioria de nós não), é melhor enviá-lo para o VCS. E o principal motivo para mim é aumentar a velocidade de compilação no servidor de CI. Atualmente, a maioria dos projetos está sendo criada e instalada por servidores de CI, sempre diferentes instâncias de servidor.
Se você não confirmar, o servidor de CI fará o download de um jar para cada build e aumentará significativamente o tempo de build. Existem outras maneiras de lidar com esse problema, mas considero a mais fácil de manter.
fonte