Как использовать пользовательский подкласс JarLauncher с загрузочной пружиной? - PullRequest
0 голосов
/ 26 мая 2018

У меня есть ситуация, когда в одном из моих обязательных jar-файлов зависимостей также есть более старая версия зависимости, встроенная в нее (стиль uber-jar).

К сожалению, встроенная зависимость несовместима с некоторыми другими зависимостями.

Я разработал стратегию с использованием пользовательской версии com.springframework.boot.loader.JarLauncher, где я могу управлять порядком файлов jar в пути к классам, переопределив метод postProcessClassPathArchives.

, эта стратегия основана на это сообщение в блоге на тему , но в моем случае вместо того, чтобы убедиться, что папка classes появляется первой в пути к классам, я сначала выдвигаю совместимую версию несовместимых встроенных классов.

упомянутое сообщение в блоге помещает подкласс JarLauncher в сам проект, но в моем случае такая ситуация может возникнуть в нескольких проектах, поэтому я хочу выделить собственный подкласс JarLauncher в свой собственный проект исделать его доступным как отдельную зависимость через некоторое подходящее хранилище maven.

также используется в блогеgradle copySpec, чтобы скопировать пользовательский класс запуска из ${buildDir}/classes в корень фляги весенней загрузки так, чтобы он был доступен загрузчику классов, ответственному за загрузку класса, названного Main-Class в манифесте.

Итак, мой вопрос касается вариантов достижения аналогичного результата, но с использованием пользовательского модуля запуска, встроенного в банку зависимостей.

Мне интересно, могу ли я ссылаться на пользовательский модуль запуска из банки?файл, помещенный в корень загрузочного фляги, или если мне нужно извлечь содержимое и просто переместить туда отдельный класс.

В любом случае, я знаком только с основами Gradle и не знаю, как выполнить любой из этих вариантов с помощью техник Gradle.

Любое руководство приветствуется!

1 Ответ

0 голосов
/ 29 мая 2018

после некоторых исследований и поисков я придумал следующее решение:

configurations {
  bootHelpr { transitive = false }
}

dependencies {
  //...
  bootHelpr 'com.github.the-watchmen:boot-helpr:1.0.0'
}

bootJar {
  with copySpec {
    from(zipTree(configurations.bootHelpr.singleFile))
  }
}

, где boot-helpr - это зависимость, содержащая обычай JarLauncher ...

я считаю себявзломанный хакер, так что не стесняйтесь размещать любые идиоматические решения;)

...