Самый простой способ - распаковать jxl.jar
и упаковать его в одну банку вместе с файлами классов.
Вы также можете положить jxl.jar
в свой кувшин, загрузить его с помощью JarClassLoader
и вызвать с помощью отражения, но это, вероятно, не стоит усилий и дополнительных сложностей.
Это должно выглядеть примерно так:
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
public class Preloader
{
public static void main(String[] args) throws Exception
{
Class<Preloader> c= Preloader.class;
URLClassLoader loader = new URLClassLoader(new URL[]{
c.getResource("program.jar"),
c.getResource("library.jar")});
Class<?> main_class=loader.loadClass("Main");
Method main_method = main_class.getMethod("main", args.getClass());
main_method.invoke(null, new Object[]{args});
}
}
К сожалению, он не работает с вложенными банками. URLClassLoader
имеет проблемы с ними. Вы можете извлечь ваши вложенные файлы jar во временные файлы и передать их в URLClassLoader. Вы также можете использовать пользовательский URLStreamHandler
, как описано здесь , это может быть даже рабочее решение.