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.
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.
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?
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?
Você quer usar classes do jar que seu projeto depende?
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?
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