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 inite 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
gradlewque é específico para Linux ou macOS. Se estiver usando Windows, então substitua o./gradlewporgradlew.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 buildSerá 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.tare 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.batno 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
.jarcom 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 runTambé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.jarVeja 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.txtNo 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.txtExecute 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 failedVeja documentação oficial que está disponível em https://docs.gradle.org/current/userguide/upgrading_version_8.html
gradle wrapper --gradle-version latest