Java (root way)
Diario de bordo (2023-12-22)
Aprendendo java, usando apenas o compilador via terminal e nvim como editor de texto
Criando um arquivo ‘main’
Criei um arquivo hello.java com a função main.
| |
Para compilar o arquivo
| |
Adiocionando à um arquivo jar
| |
Para executar o arquivo JAR, digitei o seguinte comando:
| |
O argumento -classpath (ou -cp) especifica o caminho da classe dentro do arquivo jar. Por exemplo, em um caso em que a classe esteja na pasta ./com/projeto/main, teria que declarar o empacotamento da classe com a seguinte linha no começo do arquivo:
| |
Para compilar:
| |
Aqui é passado o caminho da classe (classpath) declarada com package
| |
Note que é passado primeiro o arquivo jar criado
anteriormente e depois a classe main
(usado como em um import)
Caso passe o errado de uma classe ou uma classe que não existe, o java deve retornar o seguinte erro:
| |
Outro problema é se, mesmo passando o caminho correto da classe mas explicitar o package de forma incorreta, o jdk deve retornar o erro:
| |
Nesse caso a declaração do pacote java esta como:
| |
Como a pasta learn não existe, o java não encontra a classe
Criando um pacote
Criei uma segunda classe no mesmo pacote (com/projeto/main/Calc.java)
| |
Depois disso modifiquei a class Main:
| |
| |
Teste:
| |
Adicionando à um arquivo JAR, dessa vez de uma forma diferente. Passei a classe main na hora de criar o jar e não quando executar
| |
Para rodar, agora não é preciso dizer onde está a main class:
| |
Usando dependencias
Usando log4j2 na hora de rodar o programa (.jar)
Primeiro copiei meu projeto para outra pasta ../logging/ e o pacote mudei para org.foo.bar. Na pasta logging será preciso baixar a dependencia:
| |
| |
A biblioteca log4j, busca um arquivo log4j2.xml para ser configurado, para
não precisar desse arquivo, fiz uma configuração basica da classe logger dentro de um bloco estático.
A declaração StatusLogger.getLogger().setLevel(Level.OFF); faz com que o log4j não reclame da falta do arquivo log2j2.xml
A classe calc continua a mesma, exceto a declaração do pacote.
| |
Os arquivos JAR do log4j2 que foram necessários para o programa foram:log4j-api-2.12.4.jar log4j-core-2.12.4.jar log4j-slf4j18-impl-2.12.4.jar \
Movi da pasta apache-log4j-2.12.4-bin baixada anteriormente
Compilando o programa
| |
-cp passa o classpath do projeto e das dependencias, separados por “:” dois pontos, o “.” ponto é usado para dizer ao compilador que deve incluir a pasta atual ao classpath
Agora adicione as classes ao jar
| |
Executando o programa referenciando as dependencias
| |
Note que ao invez de um ‘.’ como na compilação, aqui é passado foo.jar para o classpath para a execução
A saída do programa:
| |
Criando um (FAT JAR)
Depois disso vamos criar um JAR autosuficiente (fat jar) com as dependencias dentro do mesmo. Para isso vamos precisar descompactar as dependências. Primeiro, vamos criar um diretório para as dependências, e extraí-las dentro deste diretório:
| |
Movi o package para ./src/, deixando o projeto mais organizado. Agora para compilar as classes:
| |
Aqui o classpath do compilador pode receber tanto o jar das dependências, quanto o diretório que for recém criado. |-d|diretório de destino das classes|
| |
Aqui estamos compactando os arquivos do diretório classes e temp para dentro do arquivo fat_app.jar e
referenciando a classe org.foo.bar.hello como main.
Executando
Ao criar um esse tipo de JAR, estamos colocando todas as dependências dentro dele, isso significa, que
para executá-lo, não dependemos dos arquivos presentes na máquina, sendo assim, podemos executar o arquivo
em qualquer diretório.
| |