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

Carregar classe no classpath em tempo de execução

Alguém sabe como carregar uma classe no classpath da aplicação de modo que eu consiga instanciar ela pelo nome?

Algo mais ou menos assim:

// a classe "com.empresa.Aplicador" foi incluída no classpath anteriormente, em tempo de exeução
Class c = Class.forName("com.empresa.Aplicador");
Object o = c.newInstance();
processarAplicacaoLinhaMontagem(o);

Já encontrei algumas soluções parecidas, mas sempre o que me é dado é uma instância de Class, de onde eu posso instanciar meu objeto. No entanto, como mostrado no código anterior, eu gostaria de incluir a classe no classpath, e então conseguir fazer o Class.forName("...") em qualque parte da aplicação.

Uma aplicação na qual trabalho vai passar a incluir scripts em linguagem Groovy, e as classes escritas em Groogy serão compiladas em (convertidas em .class do) Java e incluídas na aplicação. O Groovy oferece o GroovyScriptEngine, que consegue verificar quando os scripts são modificados. Mas o groovy também me dá apenas um objeto Class, de modo que eu teria que manter vários objetos Class de forma estática, das diferentes classes escritas em Groovy. Não acho esta solução muito boa. Prefeririaa fazer o Class.forName(..."), acho também que ficaria mais natural o tratamento do ClassNotFoundException, quando houver erro no script.

Assim, se possível, gostaria de saber se isto é possível.

Resumindo:

  1. tenho um arquivo de classe java (.class) fora da aplicação (supondo que o nome da classe seja 'com.empresa.Aplicador')
  2. Preciso incluir esta classe na aplição (Eu possui o caminho dela '/home/foo/bar/sistema/classes/com/empresa/Aplicador.class')
  3. Após carregar a classe, preciso fazer Class.forName("com.empresa.Aplicador") e tudo dar certo :)

Abraço.

  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!

0 resposta

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