Buenas.
É possível carregar arquivos .class em tempo de execução ou somente .jar?
Os .jar eu consegui carregar, usando o Class.forName, porém .class sem sucesso.
Existe alguma forma de fazer isto?
Valew!
Buenas.
É possível carregar arquivos .class em tempo de execução ou somente .jar?
Os .jar eu consegui carregar, usando o Class.forName, porém .class sem sucesso.
Existe alguma forma de fazer isto?
Valew!
Nunca fiz, mas existe a classe ClassLoader, e um método loadClass. Acredito que seja possível com ela. Quem souber, pode dizer melhor.
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/ClassLoader.html#loadClass(java.lang.String)
Acho que o que você conseguiu foi carregar classes que estavam no mesmo JAR que a sua classe executora e não conseguiu carregar classes que estavam fora do JAR me corrija se nao for isso.
Acho que para carregar classes que estão fora do JAR você deve colocá-las no classpath do manifest do JAR.
[quote=dstori]Acho que o que você conseguiu foi carregar classes que estavam no mesmo JAR que a sua classe executora e não conseguiu carregar classes que estavam fora do JAR me corrija se nao for isso.
Acho que para carregar classes que estão fora do JAR você deve colocá-las no classpath do manifest do JAR.[/quote]
Eu não entendi assim, o que você quer fazer afinal?
Fiz o teste criando dois projetos.
Um projeto fiz o que queria, e gerei um .jar dele. Este .jar gerado, eu consegui carregar no segundo projeto corretamente.
Agora o q eu realmente preciso, é pegar o .class do primeiro projeto e carregar no segundo.
Alguma sugestão?
[quote=Puri]Fiz o teste criando dois projetos.
Um projeto fiz o que queria, e gerei um .jar dele. Este .jar gerado, eu consegui carregar no segundo projeto corretamente.
Agora o q eu realmente preciso, é pegar o .class do primeiro projeto e carregar no segundo.
Alguma sugestão?[/quote]
Você quer usar classes do jar que seu projeto depende?
[quote=Puri]Buenas.
É possível carregar arquivos .class em tempo de execução ou somente .jar?
Os .jar eu consegui carregar, usando o Class.forName, porém .class sem sucesso.
Existe alguma forma de fazer isto?
[/quote]
Vc consegue ambos da mesma forma.
O ponto é que o .class tem que estar no classpath da aplicação ( tal como o jar está).
Depois com o class.forname ( que é um atalho para o ClassLoader) vc consegue carregar a classe.
Vc pode criar um classLoader seu para aumentar o que o sistema considera o “classpath”. ( o classloader do JWS ,por exemplo, considera um URL remoto)
/**
* chamada como algo: addURL(new File("c:/project/com/sample/Test.class"));
*/
private void addURL(final File directory) {
try {
final URL url = directory.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;
}
}
Esse código adiciona ao classPath. Para usar a classe use Class.forName