Um JAR dentro de outro JAR

Estou construindo uma aplicação desktop em Java (.jar) que depende de um driver de banco de dados (.jar). Já li em outros posts e pelo que pude entender não é possível encapsular um jar dentro de outro jar.

Estou usando o netBeans, e também não encontrei uma configuração nas propriedades do projeto que fizesse isso… Ele nunca carrega o jar do banco consigo. Não posso correr esse risco e não que a aplicação dependa de um jar externo. Alguém sabe uma maneira de resolver esse problema?

Valeu!

Filipi Silveira

A única coisa que me ocorre é descompactar a estrutura de diretórios e classes do drive dentro do scr do projeto… mas isso parece uma solução pouco usual. Estou certo?

Cara, você deve enviar o jar junto com a sua aplicação, mas em arquivos separados, e adiciona-los ao classpath da aplicação. Jar dentro de jar realmente não se usa.

[]'s

Sim, vc está certo!!!

Mas por ser pouco usual não quer dizer proibida.

As vantagens:

  1. Um único jar executável é fácil de distribuir sem se preocupar com estrutura de arquivos & cia.
  2. Você garante que o caboclo que tiver seu jar consegue rodar sua aplicação

Desvantagens:

  1. A atualização de apenas uma parte (por exemplo: o driver) é impossível
  2. O jar fica maior :roll:

Pese as duas coisas …

No geral trabalhe com o classpath pq com isso você consegue uma boa estrutura modular pra atualizações & cia.

Mas se for muito importante nada te impede de colocar tudo dentro do seu jar.

É o que eu falo do uso de IDE mas neguin me enforca qdo eu falo :evil:

É simples de entender e aqui no fórum isso já foi discutido bastante. Suponha que sua aplicação precise de um determinado conjunto de bibliotecas empacotadas em arquivos jar (entre eles o seu driver de banco de dados).

A maneira mais comum (e + simples) de distribuir aplicações é empacotar a estrutura toda (a distro) em zip (ou tar.gz) com esse modelo:

aplicacao/
    conf/
    lib/

No diretório aplicacao vai estar o jar da sua aplicação. Em conf as configurações. Em lib … as suas bibliotecas – ou seja, as bibliotecas que sua aplicação depende.

O lance é: definir o class-path contextual (o class path da sua aplicação) no arquivo MANIFEST.MF que deve estar em META-INF/ (dentro do jar da sua aplicação).

Algo como:

Class-Path: lib/spring.jar  
                 lib/commons-net-1.2.2.jar  
                 lib/commons-digester.jar  
                 lib/commons-beanutils.jar 

Isso é parte do conteúdo do arquivo MANIFEST.MF que está dentro do diretório META-INF do jar da sua aplicação. (Fui repetitivo?? :roll: )

O que tem a ver a IDE com isso tudo?!?

A dúvida do caboclo sobre classpath mas sim como distribuir tudo num pacote só pra facilitar a vida do usuário.

:roll:

Ele disse no post:

Estou usando o netBeans, e também não encontrei uma configuração nas propriedades do projeto que fizesse isso…

A velha discussão sobre o pessoal que começa a aprender uma linguagem complexa (e não diga que não é) como java, partindo imediatamente duma IDE. Já não bastasse a API monumental do java, patterns, ant, frameworks, o “caboclo” ainda tem q aprender a usar a IDE q em todos os casos tenta (?) tornar a vida do desenvolver + fácil. O que na prática é improvável, a menos que o desenvolvedor já saiba com o que está lidando. NMO o IDE acaba por cobrir com um véu-de-mistério coisas que deveriam ser compreendidas independente de IDE.

Não estou dizendo que IDE seja ruim. Ao contrário, acho que as IDEs (mais notávelmente Eclipse e NetBeans) realmente melhoram a vida, mas como tudo, tem prós e contras. Depois que o neguin já sabe o que tá fazendo e como fazer, partir pra uma IDE é uma questão de preferência.

Eu particularmente não gosto de IDE, pra mim é um sentimento de claustrofobia. Prefiro meu velho, surrado e excelente jEdit. :wink:

[POR_EDICAO]Eu só disse aquilo pq imaginei que ele tava com dificuldades pra fazer uma coisa bem simples – como empacotar e distribuir a app e suas dependencias – e o IDE não estava lhe dando uma opção pra isso. Foi o que entendi.[/POR_EDICAO]

Pessoal, agradeço a todos pela ajuda. Vou seguir as recomendações.

Quanto à IDE, sem dúvida é importante saber o que ela esta fazendo por tras de cada ação/configuração. Mas da IDE eu não abro mão. Principalmente do Netbeans, que facilita inúmeras tarefas.

Mas não quero levar essa discussão adiante. Cada um deve trabalhar com aquilo que se sinta melhor.

Um abraço,

Filipi Silveira