Sistema de Pacotes e Armazenamento - INF

Propaganda
Especialização em web com interfaces
ricas
Sistema de Pacotes e Armazenamento
Prof. Fabrízzio Alphonsus A. M. N. Soares
[email protected] [email protected]
Instituto de Informática
Universidade Federal de Goiás
Aula 10
1 de junho de 2012
Prof. Fabrízzio Alphonsus A. M. N. Soares | Sistema de Pacotes e Armazenamento
1/42
Pacotes
Usamos pacotes para organizar as classes semelhantes. Pacotes, a grosso modo, são apenas pastas ou diretórios do sistema
operacional onde ficam armazenados os arquivos fonte de Java
e são essenciais para o conceito de encapsulamento, no qual são
dados níveis de acesso as classes.
Java possui um pacote padrão que é utilizado quando programamos, mesmo embora não seja recomendado pela Sun usá-lo.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Sistema de Pacotes e Armazenamento
2/42
Criando pacotes
Muitos compiladores criam automaticamente os pacotes como
uma forma eficaz de organização, mas a criação de pacote pode
ser feita diretamente no sistema operacional.
Basta que criemos uma pasta e lhe demos um nome. Após isso,
devemos gravar todos os arquivos fonte de java dentro desta
pasta.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Sistema de Pacotes e Armazenamento
3/42
Definir pacotes I
Agora que já possuímos a pasta que será nosso pacote, devemos
definir em nossa classe a qual pacote ela pertence. Isso é feito
pela palavra reservada package.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Sistema de Pacotes e Armazenamento
4/42
Definir pacotes II
Package deve ser a primeira linha de comando a ser compilada
de nossa classe.
Portanto, se tivéssemos criado uma pasta chamada ufg e fossemos criar uma classe nesta pasta (pacote), o começo de nosso
código seria: package ufg;
Prof. Fabrízzio Alphonsus A. M. N. Soares | Sistema de Pacotes e Armazenamento
5/42
Importar pacotes I
Java possui vários pacotes com outros pacotes internos e várias
classes já prontas para serem utilizadas.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Sistema de Pacotes e Armazenamento
6/42
Importar pacotes II
Dentre os pacotes Java podemos determinar dois grandes pacotes:
o pacote java, que possui as classes padrões para o
funcionamento do algoritmo; e
o pacote javax, que possui pacotes de extensão que
fornecem classes e objetos que implementam ainda mais o
pacote java.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Sistema de Pacotes e Armazenamento
7/42
Importar pacotes III
Exemplo:
o pacote AWT (Abstract Windowing Toolkit) possui as classes
necessárias para se criar um ambiente gráfico API (Janelas) e
está fortemente ligado as funções nativas do Sistema Operacional, ou seja, ele pertence ao pacote java.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Sistema de Pacotes e Armazenamento
8/42
Importar pacotes IV
Mas, o pacote SWING não é ligado fortemente as funções nativas do Sistema Operacional, mas as funções do AWT, ou seja,
SWING complementa o AWT, portanto SWING faz parte do
pacote de extensão javax.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Sistema de Pacotes e Armazenamento
9/42
Importar pacotes V
Para utilizar as milhares de classes contidas nos inúmeros pacotes de Java devemos ou nos referenciar diretamente a classe ou
importá-la.
Para importar um pacote usamos o comando import.
Para separar um pacote de seu sub-pacote usamos um ponto
(como no acesso a membros de classe).
Prof. Fabrízzio Alphonsus A. M. N. Soares | Sistema de Pacotes e Armazenamento
10/42
Importar pacotes VI
Ao importarmos um pacote podemos utilizar um coringa, o asterisco (*). O asterísco serve para importar todos os sub-pacotes
e classes do pacote que está definido.
Ex.: import java.awt.*;. Isso importará todos os sub-pacotes
pertencentes ao pacote AWT.
Ou podemos definir diretamente qual pacote desejamos.
Ex.: import javax.swing.JOptionPane;.
Isso irá importar apenas o sub-pacote JOptionPane do pacote
SWING.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Sistema de Pacotes e Armazenamento
11/42
Importar pacotes VII
A diferença entre as duas formas de importação de pacotes é o
consumo de recursos do computador.
Como o asterisco importa todos os sub-pacotes, o consumo
de memória será alto e, muito provavelmente, não usaremos
todas as classes de todos os pacotes importados. Por isso,
o recomendado é sempre importar apenas o pacote que será
utilizado.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Sistema de Pacotes e Armazenamento
12/42
Importar pacotes VIII
Exemplo:
1
2
3
4
5
6
7
8
9
10
package ufg;
import javax.swing.JOptionPane;
public class Mensagem {
public static void main (String args[]){
JOptionPane.showMessageDialog(null,
"Bem vindo ao mundo de Java!");
}
}
Prof. Fabrízzio Alphonsus A. M. N. Soares | Sistema de Pacotes e Armazenamento
13/42
Importar pacotes IX
Mas atenção!
Como você colocou a classe em um pacote, alguns requisitos
são necessários para usa-lo:
1 Você deve invocar a classe de fora do diretório que
representa o pacote;
2 Caso você queira invocar a classe a partir de qualquer
diretório, você deverá indicar o diretório onde encontra-se
o pacote ou diretório na variável CLASSPATH do
ambiente ou do parâmetro do java;
3 Você sempre deverá invocar a classe pelo seu nome
completo, ou seja, nome_do_pacote.nome_da_classe.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Sistema de Pacotes e Armazenamento
14/42
Empacotando seu aplicativo em
armazenamentos I
Em diversos sistemas operacionais os programas compilados são
empacotados em um formato binário monolítico que é representado por arquivos de extensão “.exe” e “.dll” no Windows e “.so”
em S.O. como o linux. Ressalta-se que no linux, a ausência
de extensão em alguns casos “também pode” caracterizar que o
programa é um binário executável.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Sistema de Pacotes e Armazenamento
15/42
Empacotando seu aplicativo em
armazenamentos II
Estes binários pode conter todas as funções e classes do programa compilado além das instruções necessárias para o programa ser iniciado.
É importante lembrar que estes tipos de binários são construídos
para uma determinada arquitetura e sistema operacional.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Sistema de Pacotes e Armazenamento
16/42
Empacotando seu aplicativo em
armazenamentos III
O Java não possui um conceito de programa “.exe” ou equivalente de outros sistemas operacionais.
O Java trata como binário executável todo e qualquer arquivo
“.class” que possua uma função main com a sintaxe:
1
2
3
public static void main(String args[]){
}
Prof. Fabrízzio Alphonsus A. M. N. Soares | Sistema de Pacotes e Armazenamento
17/42
Empacotando seu aplicativo em
armazenamentos IV
Assim, um programa constituído de muitas classes não possuirá
um único arquivo e sim vários. Porém, quando você iniciar o
programa somente uma das classes será indicada para a JVM
executa-la.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Sistema de Pacotes e Armazenamento
18/42
Pacotes I
Como um programa em Java pode conter vários arquivos uma
tarefa interessante é empacota-los, criando assim uma estrutura
hierárquica de diretórios para dividir seu aplicativo.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Sistema de Pacotes e Armazenamento
19/42
Pacotes II
Um inconveniente que ainda persiste é o fato de que seu aplicativo fica exposto em diretórios, sujeito a algum usuário excluir
ou modificar um ou outro arquivo e prejudicando o bom funcionamento do seu aplicativo.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Sistema de Pacotes e Armazenamento
20/42
Pacotes III
Para resolver este inconveniente, o Java possui um mecanismo
de armazenamento intitulado Java Archive (JAR).
Os arquivos JAR são chamados por alguns programadores java
de executáveis do java. Porém, isto não é uma verdade. Os
arquivos JAR são na verdade arquivos compactados com o algoritmo pkzip e possuem uma estrutura interna planejada para
a JVM trata-lo.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Sistema de Pacotes e Armazenamento
21/42
Java Archive I
Java Archive (JAR) é um arquivo compactado usado para distribuir um conjunto de classes Java, um aplicativo java, ou outros
itens como imagens, XMLs, entre outros.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Sistema de Pacotes e Armazenamento
22/42
Java Archive II
É usado para armazenar classes compiladas e metadados associados que podem constituir um programa.
Arquivos jar podem ser criados e extraídos usando o utilitário “jar” da JDK. Ferramentas de compressão (como o Winzip)
também podem criar arquivos .jar.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Sistema de Pacotes e Armazenamento
23/42
Java Archive III
Na especificação desse tipo de formato JAR, é obrigatório a
presença do arquivo do tipo manifesto em um diretório METAINF. Esse arquivo pode definir dados do seu arquivo JAR, como
versão, cabeçalho, etc.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Sistema de Pacotes e Armazenamento
24/42
Java Archive IV
O formato JAR também ganhou popularidade ao ser conhecido
como o executável de Java.
Para tal, isto é, tornar seu JAR como um executável, deve-se
adicionar o atributo Main-Class ao manifesto.
O valor desse atributo deve ser o nome completo da classe, que
contenha o método public staticvoid main(String[] args), isto é,
é necessário informar qual a porta de entrada de sua aplicação.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Sistema de Pacotes e Armazenamento
25/42
Criando arquivos JAR I
Para demonstrar como criar um JAR iremos utilizar um exemplo.
Para esse exemplo iremos precisar de alguns códigos .java para
que possamos gerar o pacote da nossa aplicação, como o intuito é explicar como gerar o arquivo .jar, os códigos não serão
comentados, são apenas dois códigos simples para esta demonstração.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Sistema de Pacotes e Armazenamento
26/42
Criando arquivos JAR II
Vamos criar um diretório qualquer para o nosso projeto, eu criei
um diretório chamado “jarfiles”, (que de agora em diante será
chamado de diretório RAIZ) e dentro dele criaremos mais alguns
diretórios:
src - diretório onde colocaremos nossos arquivos fonte
bin - diretório onde colocaremos os arquivos compilados
Prof. Fabrízzio Alphonsus A. M. N. Soares | Sistema de Pacotes e Armazenamento
27/42
Criando arquivos JAR III
E dentro do diretorio “src” criaremos mais um diretório chamado
“init”, é um nome qualquer apenas para mostrar como fazer para
rodar um arquivo que estará dentro dele, e para demostrar que
é possível criar diversos diretórios e colocá-los todos no nosso
.jar.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Sistema de Pacotes e Armazenamento
28/42
Criando arquivos JAR IV
Agora que já temos os diretórios iremos criar duas classes dentro
do diretório “src/init”, são elas:
OlaMundo.java
1
2
3
4
5
6
package init;
public class OlaMundo {
public void falaOla(){
System.out.println("Olá mundo cruel!");
}
}
UsaOlaMundo.java
Prof. Fabrízzio Alphonsus A. M. N. Soares | Sistema de Pacotes e Armazenamento
29/42
Criando arquivos JAR V
1
2
3
4
5
6
7
package init;
public class UsaOlaMundo {
public static void main(String[] args){
OlaMundo om = new OlaMundo();
om.falaOla();
}
}
Prof. Fabrízzio Alphonsus A. M. N. Soares | Sistema de Pacotes e Armazenamento
30/42
Criando arquivos JAR VI
Agora vamos compilar nossos códigos java para dentro do diretório bin, para isso uma vez estando dentro do diretório RAIZ
no terminal, vamos digitar:
1
javac src/init/*.java -d bin/
Isso fará com que os arquivos .java que estão em /src/init/
sejam compilados e colocados em /bin/init/.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Sistema de Pacotes e Armazenamento
31/42
Criando arquivos JAR VII
Para ver se está tudo ok iremos rodar nossa aplicação, primeiro
entramos no diretório “bin”, e então executamos nossa aplicação
com o comando:
1
java init.UsaOlaMundo
Se tudo der certo veremos a mensagem “Olá mundo cruel!” na
tela.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Sistema de Pacotes e Armazenamento
32/42
Criando arquivos JAR VIII
Para criar o arquivo .jar iremos fazer uso do comando “jar”,
existem diversas opções que podemos passar para o comando
jar, iremos nesse artigo fazer uso das seguintes:
c - cria um novo arquivo
v - modo “verbose”, mostra na tela o que está
acontecendo
f ARQUIVO_JAR - especifica o nome que queremos para
o arquivo .jar
m ARQUIVO_DE_MANIFESTO - inclui o arquivo
informado como arquivo de manifesto (veremos isso na
segunda parte da explicação)
Prof. Fabrízzio Alphonsus A. M. N. Soares | Sistema de Pacotes e Armazenamento
33/42
Criando arquivos JAR IX
Ainda dentro do diretório bin, tudo que temos que fazer para
criar nosso .jar é executar o comando:
1
jar cvf Ola.jar init/*
Prof. Fabrízzio Alphonsus A. M. N. Soares | Sistema de Pacotes e Armazenamento
34/42
Criando arquivos JAR X
Pronto, com isso temos nossa aplicação agora dentro do arquivo
Ola.jar, vamos então executá-la, para fazer isso devemos informar no classpath onde está nossa aplicação (no caso a classe
init.UsaOlaMundo), Podemos tanto colocar o arquivo Ola.jar no
nosso classpath quanto informar esse parâmetro no momento da
execução como no comando abaixo:
1
java -classpath Ola.jar init.UsaOlaMundo
Prof. Fabrízzio Alphonsus A. M. N. Soares | Sistema de Pacotes e Armazenamento
35/42
Criando arquivos JAR XI
Se olharem dentro do arquivo Ola.jar (abram ele com um compactador qualquer como Winzip ou Winrar, pois ele é apenas um
arquivo compactado sem utilizar compressão, isso mesmo, você
poderia ter simplesmente criado um arquivo .zip ou .rar com
o seu compactador preferido informando a ele para não utilizar
compactação, apenas adicionar os arquivos e depois renomear
o mesmo para .jar que ainda assim funcionaria.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Sistema de Pacotes e Armazenamento
36/42
Criando arquivos JAR XII
Enfim, voltando a aplicação, veja que dentro dele temos um
diretório META-INF contendo o arquivo MANIFEST.MF, pois
bem, esse arquivo contém informações sobre a nossa aplicação,
como não criamos esse arquivo, ele tem apenas algumas informações básica, vamos então criar o nosso MANIFEST.MF e ver
em que ele pode nos ajudar.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Sistema de Pacotes e Armazenamento
37/42
Criando arquivos JAR XIII
Quando executamos nossa aplicação vocês se lembram que tivemos que infomar no classpath o arquivo Ola.jar para que fosse
possível rodar a classe “init.UsaOlaMundo”, agora iremos criar
um arquivo de manifesto para que seja possível rodar nossa aplicação informando apenas o arquivo Ola.jar e não mais o nome
da classe e pacote (init.UsaOlaMundo).
Prof. Fabrízzio Alphonsus A. M. N. Soares | Sistema de Pacotes e Armazenamento
38/42
Criando arquivos JAR XIV
Para isso criaremos o nosso próprio MANIFEST.MF, salvem o
código abaixo em um arquivo chamado MANIFEST.MT dentro
do diretório “bin”.
1
2
3
Manifest-Version: 1.0
Created-By: Nome do Criador
Main-Class: init.UsaOlaMundo
O mais importante aqui é a última linha “Main-Class: init.OlaMundo”,
aqui eu digo qual classe será chamada quando o arquivo Ola.jar
for executado.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Sistema de Pacotes e Armazenamento
39/42
Criando arquivos JAR XV
vamos apagar o nosso antigo Ola.jar e criar um novo, agora
informando qual arquivo de manifesto que iremos utilizar, Para
isso basta mudar um pouco nosso comando jar como no exemplo
abaixo:
1
jar cvfm Ola.jar MANIFEST.MF init/*
Prof. Fabrízzio Alphonsus A. M. N. Soares | Sistema de Pacotes e Armazenamento
40/42
Criando arquivos JAR XVI
Agora para rodar nossa aplicação precisamos apenas do comando abaixo:
1
java -jar Ola.jar
E o arquivo MANIFEST.MF se encarrega de dizer a virtual machine qual a classe que queremos que seja executada.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Sistema de Pacotes e Armazenamento
41/42
Criando arquivos JAR XVII
Observações:
Para que o Jar seja executado no linux, é conveniente
atribuir a permissão de execução ao seu arquivo .jar com
o comando chmod +x <nome_do_arquivo.jar>.
No Windows é interessante definir para os arquivos .jar
que quem executa o arquivo é o programa javaw.exe.
Assim, basta um clique duplo e seu programa será
executado. Porém, se for um programa sem janelas
gráficas, o resultado não será como o esperado.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Sistema de Pacotes e Armazenamento
42/42
Download