Arquivo de Códigos - Página Inicial
Códigos-fonte
» Boletos Bancários
» Calendário de Eventos
Linguagens
» ActionScript
» Adobe AIR
» Adobe Flex
» AJAX
» C
» C#
» C++
» CSS
» Delphi
» DHTML - Dynamic HTML
» HTML/XHTML
» Java
» JavaFX
» JavaScript
» Java Servlets
» JSP - Java Server Pages
» Perl
» PHP
» PHP-GTK
» Python
» Ruby
» Tcl/Tk
» VB.NET
Bancos de Dados
» IBM DB2
» MySQL
Frameworks
» CodeIgniter
» jQuery
» JSF - Java Server Faces
» Qt
» Ruby On Rails
» Struts
» Struts 2
» wxWidgets
» Zend Framework
Container/Servidor
» Apache Tomcat
» Apache Web Server
Ferramentas
» Apache Ant
» iTextSharp (iText#)
Referências
» CSS1 e CSS2
» JavaScript
Serviços On-Line
» Qual é meu IP?
» Tabela Cores HTML I
» Tabela Cores HTML II
» Lista de Mime Types
» Códigos Teclas Virtuais
Usuários On-Line
Visitantes: 29
PHP
O que há de novo no PHP 5?
40 dicas e truques sobre como trabalhar com datas e horas em PHP
60 dicas e truques sobre como trabalhar com strings e caracteres em PHP
PHP e a Orientação a Objetos - POO (Curso Completo)

DHTML
Curso completo de DHTML para iniciantes

CSS
Como definir uma imagem de fundo fixa na página
Definindo uma imagem de fundo para botões HTML
Você está aqui: Inicio -> Tutoriais -> Apache Ant
Como gerar arquivos JAR usando Ant
Agora que você já conhece algumas das tarefas básicas da ferramenta Ant, podemos avançar um pouco mais. Neste tópico você aprenderá como escrever um aplicativo Java composto de três classes. Em seguida escreverá um arquivo de build que compilará estas classes. Finalmente você as colocará em um arquivo Jar para distribuição. Lembre-se de que todo o processo de compilação das classes e geração do arquivo Jar deverá ser feito por um único arquivo de build.

O primeiro passo será escrever os arquivos .java que farão parte do exemplo. Este é um aplicativo simples composto de três classes chamadas Empresa, Funcionario e Cliente (boa hora para praticar composição).



Para acompanhar este exemplo você deverá criar um diretório chamado testes em seu sistema (no meu sistema estou usando "C:\testes"). Em seguida crie três arquivos .java de acordo com as listagens seguintes (para sua comodidade estes arquivos estão disponíveis para download. Basta clicar no nome de cada um deles):

Listagem para a classe Funcionario.java:

class Funcionario{
    private String nome;
    private double salario;

    public Funcionario(String nome, double salario){
        this.nome = nome;
        this.salario = salario;
    }

    public String getNome(){
        return nome;
    }

    public double getSalario(){
        return salario;
    }
}


Listagem para a classe Cliente.java:

class Cliente{
    private String nome;
    private int codigo;

    public Cliente(String nome, int codigo){
        this.nome = nome;
        this.codigo = codigo;
    }

    public String getNome(){
        return nome;
    }

    public int getCodigo(){
        return codigo;
    }
}


Listagem para Empresa.java:

public class Empresa{
    public static void main(String args[]){
        Funcionario func = new Funcionario("Carlos", 3465.23);
        Cliente cli = new Cliente("Bush", 324);

        System.out.println("Funcionário: " + func.getNome());
        System.out.println("Cliente: " + cli.getCodigo());

        System.exit(0);
    }
}


Este exemplo é muito simples. Tudo que temos aqui é uma classe pública (Empresa) que constrói instancias de duas classes que possuem acesso de pacote. Não entraremos em detalhes sobre o funcionamento de cada uma. Nosso objetivo é entender como o Ant nos possibilita compilar e empacotar estas classes em um arquivo Jar. Sendo assim vamos escrever o arquivo build.xml. Eis a listagem:

<project name="teste" basedir="." default="executar">

    <property name="classes" location="classes"/>

    <target name="dir">
        <mkdir dir="classes" />
    </target>

    <target name="limpar">
        <delete dir="classes"/>
    </target>

    <target name="compilar" depends="dir">
        <javac srcdir="${basedir}"
        classpath="${classes}"
        destdir="${classes}" />
    </target>

    <target name="empacotar" depends="compilar">
        <mkdir dir="build/jar"/>
        <jar destfile="build/jar/Empresa.jar"
            basedir="${basedir}/classes">
            <manifest>
                <attribute name="Main-Class" value="Empresa"/>
            </manifest>
        </jar>
    </target>

    <target name="executar" depends="empacotar, limpar">
        <java jar="build/jar/Empresa.jar" fork="true"/>
    </target>

</project>


Antes de executarmos este exemplo certifique-se de ter efetuado todos os passos descritos anteriormente, ou seja, você deverá ter um diretório chamado C:\testes contendo três arquivos .java e o arquivo de build (build.xml). Agora é só abrir uma seção do DOS, navegar até C:\testes e inserir o comando abaixo:

C:\testes>ant

Veja o resultado da execução do arquivo de build:

Buildfile: build.xml

dir:
    [mkdir] Created dir: C:\testes\classes

compilar:
    [javac] Compiling 3 source files to C:\testes\classes

empacotar:
    [mkdir] Created dir: C:\testes\build\jar
    [jar] Building jar: C:\testes\build\jar\Empresa.jar

limpar:
    [delete] Deleting directory C:\testes\classes

executar:
    [java] Funcionario: Osmar
    [java] Cliente: 324

BUILD SUCCESSFUL
Total time: 8 seconds


Como podemos ver por este resultado, nosso arquivo de build foi executado da maneira que esperávamos. Abra o diretório C:\testes\build\jar e verá que o arquivo Empresa.jar realmente foi gerado. Caso deseje executa-lo novamente sem a ajuda do Ant basta abrir uma seção do DOS e digitar o comando abaixo:

C:\testes\build\jar>java -jar Empresa.jar

Vamos agora entender todas as tarefas contidas neste arquivo de build. Comece analisando o elemento project:

<project name="teste" basedir="." default="executar">

Veja que o nome do projeto é teste, o diretório base é o diretório atual e a tarefa padrão (no caso de omitirmos a tarefa na linha de comando) é executar. Em seguida temos a tarefa property que nos permite definir uma variável global chamada classes:

<property name="classes" location="classes"/>

Essa variável será usada para indicarmos para o arquivo de build o diretório onde os arquivos .java deverão ser colocados após a compilação.

Quando este arquivo de build é executado temos uma série de tarefas dependentes umas das outras. Por exemplo, a tarefa executar depende das tarefas empacotar e limpar. Já a tarefa empacotar depende da tarefa compilar e assim por diante. Veja a seqüência da execução das tarefas (assumindo que a tarefa padrão seja executar):

1º - dir
2º - compilar
3º - empacotar
4º - limpar
5º - executar

Veja o trecho da tarefa dir:

<target name="dir">
    <mkdir dir="classes" />
</target>


Tudo que fazemos aqui é criar um diretório chamado classes. Em seguida observe a tarefa compilar:

<target name="compilar" depends="dir">
    <javac srcdir="${basedir}"
    classpath="${classes}"
    destdir="${classes}" />
</target>


Para a tarefa javac definimos valores para três atributos. São eles:

1. srcdir – define o diretório em que os arquivos .java a serem compilados se encontram. Usamos o atributo basedir para especificar o diretório atual.
2. classpath - Usado para indicar ao compilador o(s) caminho(s) em que algumas classes necessárias ao correto processo de compilação de encontram. Para o caso de você precisar especificar mais de um caminho, é possível usar vírgulas ou ponto-e-vírgula no valor do atributo.
3. destdir – define o diretório onde as classes compiladas serão gravadas.

E agora, a tarefa mais importante do build, a tarefa responsável por gerar o arquivo jar:

<target name="empacotar" depends="compilar">
    <mkdir dir="build/jar"/>
    <jar destfile="build/jar/Empresa.jar"
        basedir="${basedir}/classes">
        <manifest>
            <attribute name="Main-Class" value="Empresa"/>
        </manifest>
    </jar>
</target>


O primeiro passo é criar o diretório onde o arquivo jar será gravado:

<mkdir dir="build/jar"/>

Em seguida temos a tarefa jar. Esta tarefa possui os seguintes atributos:

a) destfile – É o caminho e nome do arquivo jar a ser criado.
b) basedir – Diretório a partir do qual os arquivos a serem incluídos no JAR serão pesquisados.

Todo arquivo jar precisa ter o arquivo de manifesto. Este arquivo é criado com o elemento manifest:

<manifest>
    <attribute name="Main-Class" value="Empresa"/>
</manifest>


É aqui que fornecemos o nome da classe principal do aplicativo. Falhar em fornecer este valor fará com que o arquivo jar não seja executado corretamente.

Após a geração do arquivo jar, o diretório classes é excluído com a seguinte tarefa:

<target name="limpar">
    <delete dir="classes"/>
</target>


E, finalmente, o aplicativo é executado com a seguinte tarefa:

<target name="executar" depends="empacotar, limpar">
    <java jar="build/jar/Empresa.jar" fork="true"/>
</target>


Quando o valor true é fornecido para o atributo fork da tarefa java, a execução do arquivo é feita em uma nova instancia da JVM e não aquela que está sendo usada para a execução do Ant.
Este tutorial contém as seguintes seções:
  1. Apresentação
  2. O que é o Apache Ant?
  3. Baixando e Instalando o Apache Ant
  4. Entendendo alvos, tarefas e o arquivo build.xml
  5. Criando diretórios e copiando arquivos usando Ant
  6. Usando variáveis durante o processo de automação de tarefas
  7. Como compilar arquivos Java usando Ant
  8. Uso do Ant na execução de aplicativos Java
  9. Exibindo mensagens durante o processo de automação das tarefas
  10. Empacotando aplicações web com o uso da tarefa War
  11. Usando a tarefa Unwar para extrair o conteúdo de um arquivo War
  12. Como gerar arquivos JAR usando Ant
  13. Interagindo com o Ant via console durante a execução dos arquivos de build
  14. Como obter valores via console durante a execução de um build Ant
  15. Como validar a entrada do usuário em um arquivo de build (como estender a classe Task do Ant)
 
 
Arquivo de Códigos - Página Inicial
Veja dicas, truques e anotações de Ruby
Aprenda a usar hashes (arrays associativas) em Ruby
Aprenda a embaralhar a ordem dos elementos de um array em Ruby usando sort_by
Como usar construtores de classes em Ruby
Como obter uma substring em uma string usando a notação []
Programação orientada a objetos em Ruby: Classes, objetos, métodos e variáveis de instância
Removendo os espaços em excesso de uma string
Obtendo os minutos a partir de um objeto da classe Time
Como verificar a existência de um arquivo em um determinado diretório
Como escrever um método que retorna um valor sem usar a instrução return
Como posso inserir comentários em meus códigos Ruby?
Veja dicas, truques e anotações de outras linguagens
jQuery - Usando o método prependTo() para adicionar todo o conteúdo de um elemento ao final de outro elemento HTML
Adobe Flex - Como carregar uma imagem em um componente Image usando a diretiva @Embed
Java - Como obter uma referência ao elemento no topo da Stack sem precisar removê-lo da pilha
Java - Como converter um objeto Calendar em um objeto Date
ActionScript - Como obter uma substring a partir de uma string fornecendo o índice inicial e o comprimento da substring a ser obtida
Java - Como testar se um Vector está vazio (não contém nenhum elemento)
C - Saiba mais sobre true e false em C e C++
Java - Uso da interface FileFilter para aplicar um filtro de extensão no conteúdo de um diretório
Java - Regras importantes sobre o uso de modificadores
C++ - Gerando um número aleatório entre 1 e 10 usando C++


http://www.arquivodecodigos.net
:: Arquivo de Códigos - Softwares e Consultoria em Programação ::
Todo o conteúdo deste site, quando não devidamente observado, pertence a seus idealizadores e não
poderá ser usado para outras finalidades senão estudo e aprimoramento de técnicas de programação.
Certifique-se de ler as notas legais antes de proceder com o acesso e leitura do
conteúdo disponibilizado nestas páginas.

Fale Conosco: (62) 3261-7018 / (62) 8185-0734

Desenvolvedor Responsável: Osmar J. Silva

Página Inicial Contatos Pesquisar Mapa do Site