Esse repositório contém um esqueleto mínimo de uma aplicação Java que foi gerado com gradle por meio de linha de comando. O projeto aqui criado poderá ser aberto em qualquer IDE que tenha suporte a projetos gradle, como IntelliJ, Visual Studio Code, Netbeans ou Ecplise. Se desejar, veja a documentação oficial do gradle sobre como criar uma aplicação Java.
Na distribuições Linux baseadas no Debian é possível instalar o gradle por meio de gerenciador pacotes como o apt, porém geralmente ali encontra-se uma versão não tão atual. Assim, a forma mais recomendada para instalar no Linux seria por meio SDKMAN ou do Snapcraft. No macOS é possível instalar o gradle por meio do SDKMAN ou do Homebrew. Para instalar no Windows, veja a documentação oficial do gradle.
Neste repositório foi criada uma estrutura básica de uma aplicação Java, com o nome projeto sendo "primeiro", com o nome do pacote Java sendo engtelecom.poo
e fazendo uso do framework de teste unidade JUnit Jupiter. O projeto disponível neste repositório foi criado com o gradle 7.1.1 executando a linha abaixo:
gradle init
e foram escolhidas as seguintes opções:
Select type of project to generate:
1: basic
2: application
3: library
4: Gradle plugin
Enter selection (default: basic) [1..4] 2
Select implementation language:
1: C++
2: Groovy
3: Java
4: Kotlin
5: Scala
6: Swift
Enter selection (default: Java) [1..6] 3
Split functionality across multiple subprojects?:
1: no - only one application project
2: yes - application and library projects
Enter selection (default: no - only one application project) [1..2] 1
Select build script DSL:
1: Groovy
2: Kotlin
Enter selection (default: Groovy) [1..2] 1
Select test framework:
1: JUnit 4
2: TestNG
3: Spock
4: JUnit Jupiter
Enter selection (default: JUnit Jupiter) [1..4]
Project name (default: projeto-java-gradle): primeiro
Source package (default: primeiro): engtelecom.poo
Seria possível criar um projeto gradle sem o menu interativo apresentado acima. Abaixo seria a linha necessária para criar tal projeto:
gradle init --type java-application --test-framework junit-jupiter --dsl groovy --project-name "primeiro" --package "engtelecom.poo"
Abaixo tem uma listagem de como ficará o diretório depois de ter executado o comando para criar uma aplicação Java.
.
├── app
│ ├── build.gradle <--- Arquivo com configurações do projeto
│ └── src
│ ├── main
│ │ ├── java
│ │ │ └── engtelecom
│ │ │ └── poo
│ │ │ └── App.java <--- Classe com método main
│ │ └── resources
│ └── test
│ ├── java
│ │ └── engtelecom
│ │ └── poo
│ │ └── AppTest.java <--- Classe com os testes de unidade
│ └── resources
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
└── settings.gradle
Toda configuração do projeto fica dentro arquivo app/build.gradle
. Ali é onde você poderá adicionar dependências de bibliotecas, alterar o nome da classe que contém o método main
, etc.
Note que o gradle criou uma classe exemplo engtelecom.poo.App.java
, bem como uma classe de teste exemplo engtelecom.poo.AppTest.java
. Você poderá excluir ou alterar esses arquivos sem problema algum. Contudo, se alterar o nome do arquivo engtelecom.poo.App.java
, lembre-se de atualizar o arquivo app/build.gradle
, pois há lá uma referência para essa classe.
Segundo a documentação do gradle, a maneira recomendada para executar uma construção gradle é por meio do script gradle wrapper, que já está contido nesse repositório. Os exemplos aqui usam o script
gradlew
que é específico para Linux ou macOS. Se estiver usando Windows, então substitua o./gradlew
porgradlew.bat
.
As tarefas que o gradle possui poderão ser listadas com o comando ./gradlew tasks
. Para compilar a aplicação execute a tarefa build
:
./gradlew build
Será criado um subdiretório app/build
com os seguintes subdiretórios
- distributions
- Sua aplicação compilada, bem com as bibliotecas que você incluiu na sessão de dependências do arquivo
app/build.gradle
, estarão empacotadas em arquivo.tar
e em um arquivo.zip
. Use esses arquivos para distribuir sua aplicação para outras pessoas. Para executar sua aplicação será necessário:- Descompactar. Ex:
unzip app.zip
- Executar o script presente no diretório
app/bin
. Ex:./app/bin/app
(no Linux ou macOS) ouapp\bin\app.bat
no Windows
- Descompactar. Ex:
- Sua aplicação compilada, bem com as bibliotecas que você incluiu na sessão de dependências do arquivo
- libs
- Terá um arquivo
.jar
com sua aplicação compilada, porém este arquivo JAR não contém as bibliotecas que você incluiu na sessão de dependências do arquivoapp/build.gradle
.
- Terá um arquivo
Para executar essa aplicação usando o gradle, faça:
./gradlew run
Também é possível executar uma aplicação Java com o gradle e passar argumentos de linha de comando. Abaixo um exemplo passando dois argumentos, no caso as palavras POO
e IFSC
:
./gradlew run --args="POO IFSC"
Da forma que o arquivo .jar
foi gerado, para executar a aplicação é necessário informar o nome da classe que tem o método main
.
java -cp build/libs/app.jar engtelecom.poo.App
É possível criar um arquivo .jar
de forma que não seja necessário informar o nome da classe que se deseja executar. Para tal, edite o arquivo app/build.gradle
e adicione as seguintes linhas logo abaixo do bloco já existente chamado dependencies
:
jar {
manifest {
// Classe principal da aplicação
attributes "Main-Class": "engtelecom.poo.App"
}
}
Por fim, compile o projeto com o comando ./gradlew build
e execute a aplicação com a linha abaixo:
java -jar build/libs/app.jar
Veja mais sobre arquivo manifesto do JAR na documentação oficial da Oracle.
Uma aplicação Java poderia processar um arquivo texto que é enviado para a aplicação por meio do redirecionamento da entrada. Por exemplo, o trecho Java abaixo fará a leitura de todas as linhas do arquivo texto que fora encaminhado e irá imprimir tais linhas:
import java.util.Scanner;
public class Teste{
public static void main(String[] args){
Scanner entrada = new Scanner(System.in);
while(entrada.hasNext()){
System.out.println(entrada.nextLine());
}
entrada.close();
}
}
Supondo que queira enviar o conteúdo do arquivo aulas.txt
para essa classe Teste
, então a linha de comando para executar o código seria:
java Teste < aulas.txt
No arquivo app/build.gradle foram adicionadas as seguintes linhas para definir o fluxo de entrada padrão quando for executada a tarefa run
.
// Definindo o fluxo de entrada padrão quando o projeto for executado
run{
standardInput = System.in
}
Supondo que queira enviar o conteúdo do arquivo aulas.txt
para essa classe Teste
, então a linha de comando para executar o código seria:
./gradlew run < aulas.txt
Execute a tarefa ./gradlew test
e um relatório em HTML será colocado no subdiretório app/build/reports/tests/test
. Se algum teste não passar, então o gradle lançará um aviso após a execução da tarefa. Por exemplo:
> Task :test FAILED
engtelecom.poo.AppTest > testAppHasAGreeting FAILED
org.junit.ComparisonFailure at AppTest.java:12
1 test completed, 1 failed
Veja documentação oficial que está disponível em https://docs.gradle.org/current/userguide/upgrading_version_8.html
gradle wrapper --gradle-version latest