2013-12-09 4 views
1

У меня есть 2 артефакта Maven с 2 версиями, скажем, A1, A2, B1, B2. B1 зависит от A1, B2 зависит от A2. A1 и A2 очень похожи, скажем, что A1 использует Java 7, а A2 использует Java 8 и lambdas. Все артефакты используются нашими клиентами, и иногда они устанавливают неправильный артефакт для своей среды.Maven - выберите артефакты во время выполнения

Я хочу построить базу Артефакт A1 и A2 наследует A и добавляет пользовательские функциональные возможности и другой артефакт A_Client, и я хочу выбрать runtime на основе некоторых свойств (JDK и некоторых других), для которых модуль Ax использоваться. Таким образом, нашим клиентам придется установить A_Client, и им не придется беспокоиться о правильной версии.

B1 и B2 - это то же самое, единственное, что отличается от их зависимости от Ax. Если я могу каким-то образом объединить A1 и A2, у меня будет только артефакт B, доступный для клиентов, который будет зависеть только от A_Client. Таким образом я также устраню версии B.

Итак, вопрос: Можно ли определить в runtime зависимости? Я предполагаю, что это возможно с использованием OSGi или пользовательских загрузчиков классов, но у меня очень ограниченные знания в обеих областях, поэтому любая помощь приветствуется.

+0

Примечание: область «предоставлена» предназначена для артефактов, которые волшебным образом появятся во время выполнения. Однако у меня нет опыта в обеспечении выбора подходящего артефакта. Я оставлю ответ кому-то более осведомленному. –

+1

Поместите свои банки в папку и добавьте их в путь к классам на основе определенного свойства, используя что-то вроде: http://stackoverflow.com/questions/1010919/adding-files-to-java-classpath-at-runtime – ieugen

ответ

0

Maven

Maven это инструмент для сборки, так что это не поможет во время выполнения. Можно активировать different profiles based on the used JDK, но он основан на системе, которая ее строит, а не системе, которая ее запускает.

OSGI

Я не использовал OSGI еще, но то, что я знаю, что это очень different deployment and runtime model. Это не оправдывает усилий, просто чтобы ваши клиенты не использовали неправильную версию.

процесс развертывания

Не все должно быть решено с помощью технического решения. Развертывание неправильного артефакта обязательно должно решаться с помощью скорректированного процесса развертывания. Подумайте о ..

  • Why ли они используют неправильный артефакт?
  • Есть ли у них документированный процесс развертывания? Как изменить процесс?
  • Можете ли вы сделать артефакты более различимыми? Не могли бы вы переименовать его?
  • Можете ли вы сделать это быстро? Он не должен развертываться, а не когда он уже используется.
Смежные вопросы