1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Adicionando caminho de classes no classpath

Estou precisando adicionar uma pasta que contém .class ao classpath de outra aplicação, mas em tempo de execução.

Já notei que utilizar

System.setProperty("java.class.path", caminhoClasses + ";" 
   + System.getProperty("java.class.path"));

não funciona.

Vi alternativas utilizando Classloader, porém os exemplos que vi, eram para carregar uma classe específica desse caminho. Porém não é isso que preciso. Gostaria de ter todas as classes disponíveis como se eu tivesse passado esse caminho como parâmetro da JVM.

Existe um meio de fazer isso?

Usei este recurso, porém não funcionou. Não consigo localizar a classe desejada com um Class.forName(...):

ClassLoader previousLoader = Thread.currentThread().getContextClassLoader();
        URLClassLoader loader = URLClassLoader.newInstance(urls, previousLoader);
        Thread.currentThread().setContextClassLoader(loader);
  • Antes de te responder, você está usando o caminho completo da classe no Class.forName(pacote+classe)?

    Vitor Silverio Rodrigues   18 de abr de 2013
  • Sim. Estou usando o caminho com pacote.classe.

    wellington.nogueira   18 de abr de 2013
  • Wellington, nesse caso voce vai ter de fazer loader.loadClass(...), ja que o clasloader do seu main voce nao vai conseguir mexer. Teste e veja se funciona. Fazer Class.forname faz com que ele use o classloader atual, e certamente nao funciona.

    Paulo Silveira   19 de abr de 2013
  • Paulo, até pensei em fazer isso (mas estava em casa, sem o código). Hoje, quando retomei, tinha a resposta do Ataxexe e resolvi verificá-la e funcionou. Pelo teu comentário, alterar o ContextClassLoader não resolve meu problema porque, no fim, o classloader atual não foi substituido/modificado.

    wellington.nogueira   19 de abr de 2013
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags java ou faça a sua própria pergunta.