LINUX.ORG.RU

Как объединить два .jar

 ,


0

1

Здравствуйте форумчане! скажите пожалуйста как можно обьеденить два jar файла ? В этой теме Как объединить два .jar уже обсуждалось подобное. Но мне нужно соеденить два jar файла таким способом чтобы первое ява приложение запускалось перед вторым.

Ответ на: комментарий от gamer99

Раньше они были отдельным приложением, потом автор сделал сервис, а приложение обновлять перестал. Наверное, и на сервис теперь забил. Может быть, ещё есть шанс найти ранние версии. Удачи.

i-rinat ★★★★★
()
Ответ на: комментарий от gamer99

Добавим к текущему classpath директорию с твоими jar'ками:

  URL[] repositoryJars = walkRepository (repository, new URL[] { new File(System.getProperty("user.dir")).toURI ().toURL ()});
  ClassLoader currentThreadClassLoader = Thread.currentThread().getContextClassLoader();
  URLClassLoader urlClassLoader = new URLClassLoader(repositoryJars, currentThreadClassLoader);
  Thread.currentThread().setContextClassLoader(urlClassLoader);

где repository - строка содержащая путь к складу jar файлов; а метод walkRepository выглядит следующим образом:

  public static URL[] walkRepository (String repositoryPath, URL[] Aggregator) {
    File[] list = new File(repositoryPath).listFiles();
    for (File currentFile : list) {
      if (currentFile.isDirectory()) {
        Aggregator = walkRepository(currentFile.getAbsolutePath(), Aggregator);
      } else if (currentFile.getName ().endsWith (".jar")) {
        try {
          List<URL> tempAgg = new ArrayList<URL>(Arrays.asList(Aggregator));
          tempAgg.add (currentFile.toURI ().toURL ());
          Aggregator = tempAgg.toArray (new URL[] {});
        } catch (Exception ex) {
          System.out.println ("Fail to add " + currentFile.getAbsolutePath() + ".jar file to the classpath.");
        }
      }
    }
    return Aggregator;
  }
Он рекурсивно обходит указанную папку, добавляя все найденные jar'ки к результату. Потом ты можешь свободно слеать несколько invoke'ов для необходимых тебе классов. Последовательно или в разных трэдах.
mainClass = Class.forName(mainClassName, true, urlClassLoader);
З.Ы. под виндой тоже работает.

proofit404
()
Последнее исправление: proofit404 (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.