Eu tenho uma compilação de multiprojetos e coloquei uma tarefa para criar um jar de gordura em um dos subprojetos. Criei a tarefa semelhante à descrita no livro de receitas .
jar {
from configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
manifest { attributes 'Main-Class': 'com.benmccann.gradle.test.WebServer' }
}
A execução resulta no seguinte erro:
Causa: você não pode alterar uma configuração que não esteja no estado não resolvido!
Não sei ao certo o que esse erro significa. Eu também relatei isso no Gradle JIRA, caso seja um bug .
def mainClassName
para fazer o trabalho de código ... Eu estava recebendo Não foi possível definir propriedade desconhecida 'mainClassName' para o projeto raizimplementation
configuração em vez da agora obsoletacompile
. O código acima cria um pequeno jar sem as dependências. Quando eu mudá-lo (from { configurations.implementation.collect {...} }
), ocorre um erro dizendo que a resolução de configuração 'implementação' diretamente não é permitidoconfigurations.compileClasspath
corrigirá todos osimplementation
s, mas deixará de fora asapi
dependências afik. Encontrado aqui em outra resposta a soluçãoruntimeClasspath
. Isso inclui também asapi
dependências.A resposta de @felix quase me trouxe lá. Eu tive dois problemas:
A configuração a seguir resolve isso
Para adicionar isso à tarefa de montagem ou construção padrão, adicione:
Edit: thanks to @mjaggard: nas versões recentes do Gradle, altere
configurations.runtime
paraconfigurations.runtimeClasspath
fonte
artifacts
: exatamente o que eu estava procurando.gradle fatJar
as dependências de tempo de execução, elas não parecem ser compiladas e, portanto, não podem ser copiadas.Se você deseja que a
jar
tarefa se comporte normalmente e também tenha umafatJar
tarefa adicional , use o seguinte:A parte importante é
with jar
. Sem ele, as classes deste projeto não são incluídas.fonte
group "build"
e esta tarefa estará embuild
grupo (com outras tarefas, ou seja,jar
tarefa.with jar
palavra - chave, o que exatamente ela faz?Este trabalho é bom para mim.
Minha classe principal:
E é o conteúdo do meu arquivo build.gradle:
E escrevo o seguinte no meu console:
E a saída é ótima:
fonte
Para gerar um JAR gordo com uma classe executável principal, evitando problemas com JARs assinados, sugiro o plugin gradle-one-jar . Um plugin simples que usa o projeto One-JAR .
Fácil de usar:
fonte
Suluição simples
fonte
A resposta do @ben quase funciona para mim, exceto que minhas dependências são muito grandes e recebi o seguinte erro
Para corrigir esse problema, eu tenho que usar o seguinte código
fonte
Para quem precisa construir mais de um frasco do projeto.
Crie uma função no gradle:
então ligue:
Trabalhos no gradle 5.
Jar será colocado em
./build/libs
.fonte
Eu uso tarefa
shadowJar
por plugin. com.github.jengelman.gradle.plugins:shadow:5.2.0
O uso que acabou de executar o
./gradlew app::shadowJar
arquivo de resultados será emMyProject/app/build/libs/shadow.jar
build.gradle
arquivo de nível superior :build.gradle
arquivo no nível do módulo de aplicativofonte
Gradle 6.3, biblioteca Java. O código de "jar task" adiciona as dependências à "build / libs / xyz.jar" ao executar a tarefa " gradle build ".
fonte
Se você está acostumado a formiga, pode tentar o mesmo com Gradle:
fonte