Criação de Programas Executáveis em Java 1. Ficheiros jar Aplicações “desktop” Java são distribuídas (“deploy”) através de ficheiros executáveis jar. Os applets Java podem demorar um tempo considerável a carregar, porque se são constituídos por vários ficheiros de classes, para transferir cada ficheiro o class loader necessita de estabelecer uma ligação através de sockets entre o browser do utilizador e o servidor no qual o applet existe. O estabelecimento de ligações individuais por socket para cada ficheiro é uma tarefa que consome bastante tempo. Para que, através de uma única ligação, o applet inteiro seja carregado, põem-se todos os ficheiros de um applet num único ficheiro. Este ficheiro designa-se por jar (Java ARchieve) e tem um formato que permite armazenar ficheiros .class, assim como ficheiros .java, ficheiros de áudio, de imagem e de vídeo. O interpretador de Java pode executar uma aplicação directamente de um ficheiro jar se o ficheiro manifesto indicar qual a classe que contem o método main. No Microsoft Windows, uma aplicação Java pode ser executada efectuando um duplo clique no ficheiro jar. O ficheiro manifesto tem o nome MANIFEST.MF e está incluído no directório METAINF do ficheiro jar. Este ficheiro pode ser criado com o utilitário jar, a partir de um ficheiro de texto, previamente criado, chamado manifest.tmp. Exemplo: Consideremos que a classe que contem o método main tem o nome Exemplo (contida no ficheiro Exemplo.java). Ficheiro manifest.tmp: Main-Class: Exemplo Criação do ficheiro jar usando o utilitário jar na linha de comandos: > jar cfm aplic.jar manifest.tmp *.* As opções “cfm” usadas no utilitário jar, têm o seguinte significado: A letra c indica criação do ficheiro jar. A letra f indica que o próximo argumento é o nome do ficheiro jar a criar. A letra m indica que o argumento seguinte na linha de comandos é o ficheiro manifest.tmp que é usado para criar o ficheiro MANIFEST.MF no directório META-INF do jar. A seguir às opções, nome do ficheiro jar, e ficheiro manifest.tmp, especificam-se os ficheiros a incluir no ficheiro jar. Para confirmar que os ficheiros foram arquivados correctamente, pode-se executar o comando: jar tvf aplic.jar que produz uma listagem do conteúdo do ficheiro jar. As opções “tvf” têm os seguintes significados: A letra t indica que deve listar a tabela do conteúdo (table of contents). A letra v indica que deve produzir uma saída “verbose” – inclui tamanho e data de criação dos ficheiros. A letra f indica que o próximo argumento é o ficheiro jar. 2. Criação de ficheiros jar no NetBeans Para criar um ficheiro jar no NetBeans: 1. 2. 3. 4. 5. 6. 7. 8. 9. Seleccione o directório (package) onde pretende colocar o ficheiro jar. Faça File > New. Expanda o nó JAR Packages e seleccione JAR Recipe. Prima o botão Next. Escreva o nome do ficheir jar. Prima o botão Next. Especifique o conteúdo do ficheiro jar seleccionando os ficheiros que pretende adicionar ao ficheiro jar e premindo o botão Add. Em seguida prima o botão Next. Prima o botão Generate para gerar o ficheiro manifesto. Acrescente uma linha ao ficheiro manifesto indicando a classe principal da aplicação ou do applet. Suponhamos que essa classe principal se chama Exemplo. Para uma aplicação acescente: Main-Class: Exemplo e para um applet acrescente Name: Exemplo Prima Finish. Na janela Explorer aparecerá o ficheiro jar criado. Com o botão direito do rato no ficheiro jar seleccione Compile para compilar o ficheiro. 3. Mecanismo de Extensões do Java Por vezes na execução de ficheiros jar surgem erros, reportando a impossibilidade de encontrar uma classe particular, lançando a excepção NoClassDefFoundError. Suponhamos que a classe que tem o método main se chama Exemplo. Quer a invocação do compilador (javac Exemplo.java) quer a invocação da Máquina Virtual Java – JVM (java Exemplo) usam o mesmo CLASSPATH. Contudo um duplo clique num ficheiro jar ou a execução de java –jar Exemplo.jar (excepto se no directório bin da instalação do Java) usam o Java Runtime Environment – JRE, que tem o seu próprio CLASSPATH. Se a aplicação necessita de ficheiros adicionais jar, estes devem ser colocados no sub directório lib do directório de instalação do Java para o desenvolvimento da aplicação. Mas para serem encontrados pelo JRE, estes ficheiros podem ser colocados no sub directório lib\ext do directório de instalação do JRE, ou então adicionados ao ficheiro jar e referenciados no ficheiro manifesto, como o seguinte: Manifest-Version: 1.0 Main-Class: Exemplo Class-Path: aaa.jar bbb.jar Created-By: 1.3.1 O mecanismo de extensões do Java permite estender a plataforma Java sem ter problemas com a variável CLASSPATH. Para instalar uma extensão, basta copiar o ficheiro .jar para o sub directório lib\ext do directório de instalação do JRE. Os programas Java Plug-in e Java Web Start instalam extensões a pedido automaticamente.