Pessoal, estou tentando pegar o caminho de um .xml que está dentro de um .jar, no entanto nao consigo. Tive dando uma olhada aqui no forum e provavelmente precisarei dessa linha de codigo abaixo :
InputStream is = getClass().getClassLoader().getResourceAsStream("/relatorios/relatorio.xml");
Minha duvida eh : Como vou pegar, a partir desse código acima, o caminho desse relatorio.xml ?
Mas dá um erro de io, dizendo que não existe o arquivo /relatorios/relatorio.xml
Acho q esse metodo, getResource(), pega o caminho absoluto e no meu caso acho que deveria ser o caminho relativo, pois o relatorio.xml encontra-se num .jar.
Onde Almoxarifado eh a pasta onde meu projeto foi criado e Relatorio.jar o meu jar que eu quero acessar !
Na minha aplicação eu executo um comando igual ao q está dentro do seu System.out.println(), mas quando eu pego a saida desse comando e passo para uma classe tentar acessar o relatorio.xml retorna um erro dizendo que nao consegue acessar o relatorio.xml.
PS : O q eh aquele Teste. * que vc coloca na hora de criar o jar ??
[quote=danieldestro]A única maneira de você pegar o conteúdo do seu XML dentro do JAR é usando o getResourceAsStream(), diretamente NÃO DÁ.
E o Teste.* inclui o Teste.class e o Teste.java.[/quote]
Daniel, vou dá uma explicada na minha estrutura para vê se o q eu estou tentando fazer é possível. Coloquei Relatorio.class e relatorio.xml dento de Relatorio.jar, a estrutura do Relatorio.jar está assim :
Coloquei Relatorio.jar no classpath e até aqui tudo blz. Agora, para o Relatorio.class executar eu preciso passar como parametro o caminho do relatorio.xml. Estou tentando pegar esse caminho atraves do seguinte comando :
Ai, ao passar esse caminho como parametro, ele dá um erro dizendo q nao consegue encontrar o relatorio.xml.
Isso q eu estou tentando fazer eh possivel nao eh ??
[quote=danieldestro]Já que está no mesmo nível (diretório) do seu xml:
String Diretorio = getClass().getResource(“relatorio.xml”).getPath();
[/quote]
Tentei tb , mas nao deu certo ! Deu esse erro : java.lang.NullPointerException
Cara, se antes não dava null pointer é pq achava o arquivo no seu JAR.
E como eu disse, não é possível acessar (ler) o arquivo do modo que estava pensando. Para pegar o conteúdo TEM QUE SER com getResourceAsStream(), ou então deixa o arquivo fora do jar.
Eu não quero pegar o conteudo, mas sim o caminho !! Depois que eu pegar o caminho eu vou passar para o Relatorio.class que de posse do caminho poderar compilar e executar o relatorio.xml.
Valeu cara pela ajuda !! Vou ver outra forma aqui de fazer ! No meu caso nao darai certo passar o conteudo nao, poi s meu .class tem que receber o caminho.
package br.com.system.server;
import ....;
class Server
{
...
URL url = this.getClass().getResource( "/br/com/system/log4j.xml" );
...
}
Eu tive problemas para colocar outros JARs e DLLs dentro do JAR de execução, o getResource acessava mas não conseguia acessar. Eu resolvi criando um rotina para copiar esses arquivos para o TEMP e dai usá-los.
Deixa eu explicar o que eu estou fazendo para ver se é isso mesmo que você quer.
Eu tenho o JAR da minha aplicação, dentro dela eu tenho uma pasta lib onde eu tenho alguns JAR’s e DLL’s. Eu tenho uma outra estrutura br/com/system/… que é o meu package e dentro do meu package eu tenho vários arquivos XML’s de configuração espalhados.
O getResource sempre funcionou quando eu estava desenvolvendo a aplicação (Eclipse), mas quando eu empacotei o JAR eu tive o mesmo problema.
Para carregar os arquivos XML’s eu não tive problemas, eu simplesmente uso
O que pode apresentar problemas é que se você estiver rodando o JAR em um diretório que contenha espaços, como, “arquivos de programas” ele vai retornar um endereço que não vai funcionar (pelo menos eu não consegui), então eu uso
Carregar arquivos dentro do JAR funciona sim. Eu tenho DLL’s e JAR’s de outros módulos todos eles empacotados juntos e a minha aplicação reconhece todos eles, alguns diretos outros através do truque de copiar para o temp.
Qualque coisa me passe o código e eu tento ver aqui.