Acessar arquivo do Jar dentro de uma classe no Jar

2 respostas
Paulo_de_Tarso

Salve, salve galera do GUJ…

Mais um problema para vocês…

Seguinte, estou em importador-0.1.jar… Tanto a classe como o arquivo xsd citados abaixo estão empacotados nesse jar.

Tenho um cliente que está executando a classe do jar…

Dentro da classe br.com.biromba.importador.utils.XMLUtils tenho o seguinte código:

// TODO testando aqui...
		URL teste = XMLUtils.class.getResource( nomeDoEsquema );
			
		Schema schema = sf.newSchema( teste );

Onde estou tentando criar uma URL para o arquivo que também está dentro do jar: etc\xsd\importadores.xsd.

Colocando este nome de arquivo (etc\xsd\importadores.xsd) como parâmetro nomeDoEsquema, com ou sem barra () no início, o getResource sempre tá retornando NULL.

Observação: no Manifest do Jar já coloquei isso:

Class-Path: . etc\xsd\importadores.xsd

E aí?

Valeu,

2 Respostas

Paulo_de_Tarso

Consegui,

Na verdade, executei 3 procedimentos:

  1. Troquei a barra de File.separator por barra pra direita (/), sempre fixa;
  2. Principalmente, mudei a chamada ao getResource, inserindo o getClassLoader() explicitamente:

// Criando uma URL para o arquivo xsd URL url = XMLUtils.class.getClassLoader().getResource( nomeDoEsquema);
3. Adicionalmente, removi todas as referências de classpath no Manifest.mf.

Acho que a maior confusão foi em relação ao File.separator. Porque um colega me ensinou a utilizá-lo para acessar o sistema de arquivos portavelmente. Porém, no jar a lógica é outra, e sempre usa-se barra pra direita (/). Faz até sentido que o Java abstraia isso, uma vez que o arquivo é conteúdo do jar.

É isso aí!

Paulo de Tarso
[email removido]
www.larces.uece.br/~ze
Biromba Software do Brasil.

ViniGodoy

E tem mais um detalhe que pode pegar quem usa Windows.

O getResource() é case sentitive quando se trata de arquivos .jar, mas não será case sensitive quando o arquivo estiver fora. Isso é um problema pois no projeto tudo parece funcionar as mil maravilhas e na hora que você gera o .jar, tudo para de funcionar.

Para resolver o problema é só usar de maneira case sensitive, mesmo no Windows.

Criado 18 de maio de 2007
Ultima resposta 23 de mai. de 2007
Respostas 2
Participantes 2