Adicionar e utilizar classe compilada fora do projeto

Bom dia a todos,
Gostaria de saber como faço para adicionar um .class externo ao meu projeto em tempo de execução. Já li que isso deve ser feito adicionando esse .class ao classpath do projeto, inclusive encontrei aqui um código que faz isso, porém quando tento acessar a classe adicionada usando o Class.forName() dá um exception de classe não encontrada.

Segue o código que inclui a classe ao classpath da aplicação:

/**
Aqui eu passo o arquivo que representa o .class
Ex: /home/laudenpower/MinhaClasse.class
*/
public void addURL(final File directory) {
        try {
            final URL url = directory.toURI().toURL();            
            final Method method = this.getMethod();
            final URLClassLoader sysloader = (URLClassLoader) this.getClass().getClassLoader();
            method.invoke(sysloader, new Object[]{url});
        } catch (final Exception e) {
           e.printStackTrace();
        }
    }

    private Method getMethod() {
        final Class<URLClassLoader> sysclass = URLClassLoader.class;
        Method method = null;
        try {
            method = sysclass.getDeclaredMethod("addURL", new Class[]{URL.class});
            method.setAccessible(true);
            return method;
        } catch (final Exception e) {
            e.printStackTrace();
            return null;
        }
    }

O meu objetivo é adicionar classes em tempo de execução para que usando reflection eu possa saber quais atributos e métodos que essas classes possuem.

Desde já agradeço a atenção de todos e aguardo retorno.

Creio que essa URL … é uma URL de classpath… então vc nao vai dar o caminho todo o arquivo .java… e sim… o classpath desse arquivo…

Suponha que vc tenha a classe x.Y

E que o arquivo dessa classe esteja no seguinte caminho /foo/bar/x/Y.class

O classpath seria apenas /foo/bar…

Quando vc pedir a classe x.Y o classloader procura no diretório /foo/bar (que está no classpath) pela classe x.Y no caminho /foo/bar/x/Y.class

Sacou?

[quote=rogelgarcia]Creio que essa URL … é uma URL de classpath… então vc nao vai dar o caminho todo o arquivo .java… e sim… o classpath desse arquivo…

Suponha que vc tenha a classe x.Y

E que o arquivo dessa classe esteja no seguinte caminho /foo/bar/x/Y.class

O classpath seria apenas /foo/bar…

Quando vc pedir a classe x.Y o classloader procura no diretório /foo/bar (que está no classpath) pela classe x.Y no caminho /foo/bar/x/Y.class

Sacou?[/quote]

Realmente vc estava certo eu devia passar o diretorio onde estava o .class e nao ele em si, mas agora tenho outro erro. Quando eu uso o Class.forName(“nome da classe”); ele da um ClassNotDefException colocando entre pararenteses "wrong name: " nesse caso eu verifiquei que essa classe que estou adicionando pertencia a outro pacote no projeto onde ela foi originalmente criada, nesse caso como posso contornar esse problema?
Desde já agradeço a sua ajuda e coloco a disposição para trocar outros conhecimentos caso lhe seja necessáro.

Monte a estrutura correta de diretorios de acordo com o pacote original da classe…

se o pacote original era pka.pkb…

Crie o caminho /pka/pkb (dentro da pasta do seu classpath) e coloque a classe lá dentro…

Nao sei se compreendi se o problema era esse…

[quote=rogelgarcia]Monte a estrutura correta de diretorios de acordo com o pacote original da classe…

se o pacote original era pka.pkb…

Crie o caminho /pka/pkb (dentro da pasta do seu classpath) e coloque a classe lá dentro…

Nao sei se compreendi se o problema era esse…[/quote]

Nesse caso então acho que acabo perdendo o perfil dinâmico da aplicação, pois preciso ser capaz de adicionar qualquer classe de qualquer projeto nesse programa, para depois utilizar reflection e descobrir os seus métodos e atributos.

Vc pode criar um outro classloader… personalizado que nao dependa da URL entao…