Como Construir e Empacotar uma Aplicação Java?
Entenda como compilar e empacotar seu projeto Java em um arquivo JAR hospedado usando Maven ou Gradle.
📌 Por Que Preciso Construir Minha Aplicação Java?
Discloud não compila projetos Java automaticamente.
Você deve:
✔ Compilar seu código em arquivos .class.
✔ Empacotar tudo em um único arquivo .jar (incluindo dependências).
✔ Garantir que o arquivo META-INF/MANIFEST.MF defina corretamente a Main-Class.
🔧 Escolhendo uma Ferramenta de Construção
Maven
Grandes projetos, aplicativos com muitas dependências
pom.xml
Gradle
Projetos modernos com scripts de construção flexíveis
build.gradle ou build.gradle.kts
📦 Construindo Sua Aplicação Java
Apache Maven é uma ferramenta de automação de construção amplamente usada que gerencia construções de projetos, dependências e documentação usando um Modelo de Objeto de Projeto (POM).
Adicione o Plugin do Compilador Maven**.**
Garanta que seu pom.xml inclua o Plugin do Compilador Maven para especificar a versão do Java para compilação. Isso evita problemas de compatibilidade ao executar o projeto.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.9.9</version>
<configuration>
<source>17</source>
<target>17</target>
</configuration>
</plugin>Especifique a Classe Principal**.**
Para tornar sua aplicação executável, você precisa especificar o ponto de entrada (método main). Isso é feito usando o Plugin Maven Shade, que também garante que todas as dependências sejam agrupadas dentro de um único arquivo JAR.
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<!-- NOTE: Replace this with the correct path to your project's main class -->
<mainClass>com.project.example.Main</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>Construa o Projeto**.**
Execute o seguinte comando para limpar construções antigas e gerar os novos arquivos JAR:
mvn clean packageApós executar mvn package, o Maven criará dois arquivos JAR diferentes dentro do diretório target/:
JAR Padrão (JAR Original do Projeto).
📌 Nome do arquivo: original-<artifactId>-<version>.jar
📌 Exemplo: original-com.maven.discordbot-0.0.1-SNAPSHOT.jar
📌 Conteúdo:
Apenas o código compilado do seu projeto.
NÃO inclui dependências.
NÃO use este arquivo para execução a menos que as dependências sejam tratadas separadamente.
JAR Gordo (JAR Sombreado com Dependências).
📌 Nome do arquivo: <artifactId>-<version>.jar
📌 Exemplo: com.maven.discordbot-0.0.1-SNAPSHOT.jar
📌 Conteúdo:
Seu código de aplicação compilado.
Todas as dependências incluídas (JDA, Apache Commons, etc.).
Arquivo de manifesto (
MANIFEST.MF) com a entradaMain-Class.
Use este arquivo para execução e upload.
Gradle é uma ferramenta flexível de automação de construção que usa uma DSL baseada em Groovy ou Kotlin para definir o processo de construção.
Aplique o Plugin Java.
Garanta que seu build.gradle (Groovy) ou build.gradle.kts (Kotlin) aplique o plugin Java:
plugins {
id 'java'
id 'com.gradleup.shadow' version '8.3.6' // Plugin Shadow para Fat JAR
}plugins {
java
id("com.gradleup.shadow") version "8.3.6"
}Especifique a Classe Principal.
Para tornar a aplicação executável, defina o ponto de entrada (método main) dentro do manifesto JAR.
shadowJar {
archiveClassifier.set('all')
manifest {
attributes(
'Main-Class': 'com.project.Main' // Substitua pela sua classe principal real
)
}
}
tasks.build.dependsOn shadowJar // Garantir que o shadowJar seja executado ao compilarimport com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
tasks.withType<ShadowJar> {
archiveClassifier.set("all")
manifest {
attributes(mapOf("Main-Class" to "com.project.Main")) // Substitua pela sua classe main real
}
}
tasks.named("build") {
dependsOn("shadowJar")
}Construa o Projeto.
Para limpar construções antigas e gerar novos arquivos JAR, execute:
gradle clean buildJAR Padrão (JAR Regular do Projeto).
📌 Nome do arquivo: <project-name>.jar
📌 Exemplo: discordbot.jar
📌 Conteúdo:
Apenas o código compilado do seu projeto.
NÃO inclui dependências.
NÃO use este arquivo para execução a menos que as dependências sejam tratadas separadamente.
JAR Gordo (Uber JAR com Dependências).
📌 Nome do arquivo: <project-name>-all.jar
📌 Exemplo: discordbot-all.jar
📌 Conteúdo:
Seu código de aplicação compilado.
Todas as dependências incluídas (JDA, Apache Commons, etc.).
Arquivo de manifesto (
MANIFEST.MF) com a entradaMain-Class.
Use este arquivo para execução e upload.
Last updated