Разработайте экологически чистый процесс сборки Maven

  1. О переменных среды
  2. Экологически зависимое управление зависимостями в Maven
  3. Настройка проекта
  4. Настройка демонстрации и исходный код
  5. Пример приложения: Mule ESB
  6. Рисунок 1. Схема предлагаемого решения для сборки Maven (нажмите, чтобы увеличить)
  7. Листинг 1. Mule-приложение ESB pom.xml

Традиционные приложения Java записывают переменные времени выполнения в файлы свойств, а затем упаковывают их в отдельные JAR-файлы для различных программных сред. Но для пользователей Maven было бы лучше включить переменные среды в процесс сборки. В этой статье Пол Спинелли показывает, как расширить стандартную сборку Maven для переноса любого приложения Java на несколько сред.

Java-приложению, размещенному на сервере приложений, обычно требуется доступ к набору пар ключ-значение, которые предоставляют переменные среды выполнения, например URL-адрес соединения JDBC. В этой статье я продемонстрирую другой подход к разработке приложений, учитывающих среду, сделав переменные среды частью процесса сборки Maven.

Разработка процесса сборки, учитывающего среду, включает в себя два плагина Maven и два небольших проекта для вашего кода. Указание среды сборки в качестве аргумента JVM на этапе сборки Maven будет динамически устанавливать файлы свойств, чтобы отражать правильные значения для данной среды. Все файлы свойств будут помещены в каталог, доступный для пути к классам, а не объединены в JAR-файлы.

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

О переменных среды

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

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

В дополнение к переменным среды выполнения приложения обычно также выводят на экран определенные конфигурации программного обеспечения, которые не требуются для выполнения программного обеспечения (например, значения по умолчанию, включенные в типичную установку). Эти конфигурации программного обеспечения позволяют пользователям и установщику некоторый контроль над поведением программного обеспечения во время выполнения. Часто они хранятся в базе данных или, опять же, в файлах свойств.

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

Экологически зависимое управление зависимостями в Maven

Вы можете быть знакомы с использованием Maven строить профили загружать переменные в процесс сборки для разных сред. Переменные, определенные в профиле сборки, доступны в каждом файле pom.xml, предназначенном для использования при создании развертываемых артефактов. Профили сборки эффективны, но для их использования необходимо вручную развернуть файл settings.xml в каталоге $ USERHOME \ .m2 на машине сборки или в каталоге $ M2_HOME / conf / settings.xml. Это делает полученное приложение менее переносимым, чем хотелось бы. Профили сборки также не легко справляются с развертыванием различных наборов файлов свойств для каждого приложения и среды.

В этой статье я продемонстрирую альтернативу использованию профилей сборки Maven для разработки сборки, учитывающей среду. Работа в среде сборки с учетом среды означает, что когда программное обеспечение компилируется и / или встраивается в развертываемый пакет, все файлы свойств будут существовать как часть проекта и будут правильно настроены для целевой среды.

Хотя это может быть не так важно для разработчиков, ориентированных на работу в среде разработки, это становится важным на других этапах жизненного цикла разработки программного обеспечения (SDLC). Например, во время цикла обслуживания программного обеспечения группа управления конфигурацией обычно переупаковывает программное обеспечение для тестовой среды перед выпуском в производственную среду. Тестовая среда обычно отражает производственную среду, поэтому она должна быть подключена ко всем внешним системам, необходимым для правильного размещения и тестирования всех функций, предоставляемых программным обеспечением. Настройка файлов свойств программного обеспечения для использования во время развертывания, даже во время тестирования, должна быть гладким и простым процессом и не должна требовать помощи команды разработчиков.

Для проектов, уже использующих Maven, имеет смысл усовершенствовать существующую систему сборки Maven, а не вводить другую систему или набор инструментов управления зависимостями.

Настройка проекта

Чтобы следовать примерам, вам потребуется следующая настройка в вашей среде разработки:

  1. App-Config : проект Maven, который содержит все файлы свойств в виде шаблонов для трех сред: разработки, тестирования и производства. App-Config также содержит главный файл свойств для каждой среды, который содержит пары ключ-значение свойства для всех переменных приложения, используемых во время выполнения.
  2. Parent-Pom : проект Maven, содержащий родительский POM для наследования другими проектами Maven.
  3. Maven-зависимость-плагин а также Maven-ресурсы-плагин , Они будут использоваться POM проекта Parent-Pom и отдельными POM проекта для копирования и фильтрации шаблонов файлов свойств.

Настройка демонстрации и исходный код

Проекты Maven, использованные в этой статье, создают приложение Mule ESB 3.2 с использованием плагина Eclipse m2eclipse Maven и плагина Eclipse Maven Mule. Проекты Maven были построены в Eclipse Indigo. Пока тебе не нужно скачать проекты следовать примеру, это может быть полезно. Увидеть Ресурсы подробнее о настройке среды разработки.

Пример приложения: Mule ESB

Приложение Mule ESB состоит из ZIP-файла, который содержит классы и JAR-файлы, ресурсы и файл mule-config.xml. Это содержимое помещается в определенные области файла ZIP, так же, как файл WAR определяет конкретную структуру каталогов. Плагин Maven Mule создает артефакт ZIP на этапе упаковки, а также копирует файлы в правильные каталоги внутри ZIP. Плагин Mule также включает зависимые файлы JAR в ZIP.

Чтобы продемонстрировать процесс сборки с учетом среды, мы создадим приложение Mule ESB, которое содержит два других приложения (связанных как JAR), каждое из которых содержит свои собственные файлы свойств. Один из JAR-файлов будет содержать код соединения с базой данных JDBC MS SQL Server, который считывает информацию о соединении с базой данных из файла свойств с именем database.properties. Другой JAR будет содержать клиент веб-службы SOAP, который использует файл свойств для загрузки информации, необходимой для подключения к серверу, на котором размещены веб-службы.

Следует отметить, что выбор использования Mule ESB был сделан только потому, что полученный в результате артефакт сборки Maven представляет собой ZIP, а структура папок ZIP идеально подходит для этого примера. Проект, который создает артефакт WAR, был бы таким же действительным. Также обратите внимание, что обычно вы позволяете вашему ESB обрабатывать установление и управление подключениями к базе данных и веб-сервисам, но опять же, Mule ESB был выбран для создаваемого артефакта.

Полное решение в этом примере состоит из трех приложений, каждое из которых настроено как проект Maven:

  1. Проект Mule ESB Maven
  2. Проект Database Maven
  3. Проект Maven клиента веб-службы SOAP

Для целей этой статьи не так важно, почему или как приложение Mule ESB использует два других проекта, поэтому я не буду тратить время на детали их функциональности. Вместо этого мы сосредоточимся на правильной настройке файлов свойств для всех трех проектов. Когда проект Mule ESB встроен в его ZIP-артефакт, все файлы свойств, связанные внутри ZIP, должны содержать свойства, специфичные для данной среды развертывания. Поскольку два JAR-файла приложения Mule подключаются к внешним системам и используют файлы свойств для получения информации об этих внешних системах, мы можем предположить, что эта информация может изменяться в зависимости от среды.

На рисунке 1 представлен обзор расширенной системы сборки Maven.

Рисунок 1. Схема предлагаемого решения для сборки Maven (нажмите, чтобы увеличить)

Традиционные приложения Java записывают переменные времени выполнения в файлы свойств, а затем упаковывают их в отдельные JAR-файлы для различных программных сред

Распаковка примеров приложений

Давайте посмотрим на файлы pom для каждого из наших приложений, начиная с приложения Mule в листинге 1.

Листинг 1. Mule-приложение ESB pom.xml

<? xml version = "1.0" encoding = "UTF-8"?> <project xmlns = "http://maven.apache.org/POM/4.0.0" xmlns: xsi = "http: //www.w3 .org / 2001 / XMLSchema-instance "xsi: schemaLocation =" http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd "> <modelVersion> 4.0 .0 </ modelVersion> <groupId> com.techflow.bcs3.ldp.mule-esb </ groupId> <artifactId> mule-app </ artifactId> <packaging> mule </ packaging> <name> Mule Application </ name > <description> Приложение Mule, которое подключается как к базе данных, так и к веб-службе. </ description> <version> $ {app.version} </ version> <properties> <app.version> 1.0-SNAPSHOT </app.version> <mule.version> 3.2.0 </mule.version> <database.version> 1.0-SNAPSHOT </database.version> <web-service-client.version> 1.0-SNAPSHOT </web-service-client.version> </ properties> <build> <pluginManagement> <plugins> <plugin> <groupId> org.apache.maven.plugins </ groupId> <artifactId> maven-install-plugin </ artifactId> <версия> 2.3.1 </ версия> </ plugin> <! - Конфигурация этого плагина используется для хранения Eclipse m2e только настройки Это не имеет никакого влияния на саму сборку Maven. -> <plugin> <groupId> org.eclipse.m2e </ groupId> <artifactId> отображение жизненного цикла </ artifactId> <версия> 1.0.0 </ version> <конфигурация> <! - содержимое, не отображаемое в этом статья для краткости. -> </ configuration> </ plugin> </ plugins> </ pluginManagement> <plugins> <plugin> <groupId> org.mule.tools </ groupId> <artifactId> maven-mule-plugin </ artifactId> < версия> 1.7 </ version> <extensions> true </ extensions> </ plugin> <plugin> <groupId> org.apache.maven.plugins </ groupId> <artifactId> maven-compiler-plugin </ artifactId> <версия > 2.3.2 </ version> </ plugin> </ plugins> </ build>! - Зависимости Mule -> <зависимость> <зависимость> <groupId> xalan </ groupId> <artifactId> xalan </ artifactId> <версия> 2.7.1 </ версия> <область действия> </ scope> </ зависимость> <зависимость> <groupId> xerces </ groupId> <artifactId> xercesImpl </ artifactId> <версия> 2.9.1 </ version > <scope> предоставлено </ scope> </ dependency> <dependency> <groupId> xml-apis </ groupId> <artifactId> xml-apis </ artifactId> <версия> 1.3.04 </ version> <scope> <scope> </ scope> </ dependency> <dependency> <groupId> com.foo </ groupId> <artifactId> database </ artifactId> <версия> $ {database.version} </ version> <scope> compile </ scope> </ зависимость> <зависимость> <groupId> co m.foo </ groupId> <artifactId> клиент веб-службы </ artifactId> <версия> $ {web-service-client.version} </ version> <scope> compile </ scope> </ dependency> </ зависимости> </ project>

На рисунке 2 показана структура каталогов проекта Maven приложения Mule ESB в Eclipse Indigo.

Рисунок 2. Структура каталога ESB Mule

Похожие

Баннеры Брокер - Понзи схема обвинения усиливаются
Партнерская индустрия основана на взаимовыгодных партнерских отношениях. Согласно ежегодным данным о расходах AIB / PwC, в первой половине 2012 года этот сектор стоил 47 миллионов фунтов стерлингов. Однако время от времени он вызывает
Демонстрации против слияния Thyssenkrupp и Tata
Около 7000 Немецкие сталелитейщики провели в пятницу демонстрацию в Бохуме, Северный Рейн-Вестфалия, против планов концерна Thyssenkrupp, который хочет объединить свой производственный цех с аналогичным филиалом индийского промышленного конгломерата Tata.
Инструкция по эксплуатации с Alterrra
Технический документ на эту тему в формате PDF Зачем использовать мануалы с Alterra? Интеграция Alterra имеет смысл везде, где в компаниях было выполнено создание документа по методу «Поиск -
Продуктовый магазин или филиал
Эта система рекомендуется для пищевых продуктов со средним количеством до 5 касс. Комбинация кассовых аппаратов с компьютером, оснащенным складской программой для управления магазином, сотрудничество со сборщиком данных (запасами) сзади, считывателями штрих-кодов на кассовых аппаратах и ​​компьютером в офисе гарантирует полный контроль над состоянием склада. Примерная установка состоит из: Перейдя по ссылкам ниже, вы увидите устройства, рекомендуемые
, 30 мая 2018 г. / PRNewswire / - Arca Capital, один из крупнейших акционеров AmTrust Financial Services, I...
, 30 мая 2018 г. / PRNewswire / - Arca Capital, один из крупнейших акционеров AmTrust Financial Services, Inc., призывает других миноритарных акционеров проголосовать против предлагаемой «закрытой» сделки AmTrust Financial Services, Inc. он считает абсурдно низкую оценку в 13,50 долл. за акцию. Среди многочисленных причин, которые Arca Capital привела в качестве возражения против сделки, был недавний отчет очень уважаемой фирмы Institutional Shareholder Services (ISS), в которой говорилось,
HDR: что это и приложения
High Dinamic Range , акроним HDR : это можно увидеть на многих телевизорах нового поколения, но концепция не всегда ясна. Прежде всего, не всегда легко понять связь между различными аббревиатурами и какой вес придать индивидуальным спецификациям. Прибыл в эпоху 4K концепция HDR становится решающим шагом вперед для построения изображения более высокого качества: процесс, который начинается с редактирования
Nikon конкурирует с Cashback этого года. Возврат к 1290 зл.
В этом году кэшбэк предлагает целых 21 продукт, включая зеркальные камеры D750 и D7500, а также целый ряд интересных очков. Мы можем получить возврат до 1290 злотых. Стоимость возврата в рамках предложения о возврате денежных средств в этом году зависит от модели приобретенного продукта. При покупке камер, на которые распространяется акция, возмещение составляет от 129 злотых до 1290 злотых, а при покупке объективов от 215 до 645 злотых. Каждый участник может получить возмещение не более
HDMI Made Easy: конвертеры HDMI-VGA и VGA-HDMI
Потребительский рынок внедрил технологию High-Definition Multimedia Interface (HDMI®) в телевизорах, проекторах и других мультимедийных устройствах, благодаря чему HDMI стал всемирно признанным интерфейсом, который вскоре потребуется во всех мультимедийных устройствах. Интерфейсы HDMI, уже популярные в домашних развлечениях, становятся все более распространенными в портативных устройствах и автомобильных информационно-развлекательных системах. Внедрение стандартизированного мультимедийного
UV Grow Lights с LightRail - увеличивайте THC и производите быстрее
Вы, наверное, слышали о производителях, использующих растущие ультрафиолетовые лучи или ультрафиолеты. Это добавление оборудования для выращивания действует как стрессовый агент в конце цикла цветения. Это простое изменение освещения в помещении улучшает качество урожая для наших установок для выращивания в помещении. И мы добиваемся этого, просто меняя наши системы освещения. Существует доказательство того, что воздействие ультрафиолетового света растет с помощью запуска растений для увеличения
Hello Kitty, самый известный котенок в Японии
Привет Китти, феномен! Hello Kitty - кошка, которая пользуется успехом во всем мире и была воспитана в Японии 44 года назад. Этот простой набор черт был создан дизайнером Икуко Симидзу для компании Sanrio. Она проектировала его в течение года, и после ухода из компании дизайнер Сэцуко Йонекубо занял пять лет до 1980 года,
7 новая Земля! Зрелищное открытие НАСА
Огромное, гигантское открытие! Одно из самых важных наблюдений в истории неба и вселенной вокруг нас. И одна из самых зажигательных фантазий! 7 планет, каждая с массой, похожей на Землю. 7 планет, вращающихся вокруг звезды-карлика на расстояниях, свидетельствующих о том, что на них преобладает температура, способствующая рождению и развитию жизни, какой мы ее знаем здесь, на Земле. 7 планет в двух шагах от космического камня, потому

Комментарии

Что нужно сделать, чтобы термос согрелся?
Что нужно сделать, чтобы термос согрелся? Есть один проверенный способ для этого. Всегда перед тем, как наполнить термос подходящим напитком, я наливаю в него кипящую воду и оставляю на несколько минут. Такая простая процедура оптимизирует тепловую эффективность термоса, и в этом все дело. Тепловые параметры каждого термоса обычно можно найти на сайте производителя. Они, конечно, предоставляются в форме оценки, измерения также обычно проводятся при комнатной температуре ...
Цель этой статьи не в том, чтобы ответить на вопрос: какой телескоп лучший?
Цель этой статьи не в том, чтобы ответить на вопрос: какой телескоп лучший? Это как бы ответить на вопрос, какая машина лучшая? Нет однозначного ответа на поставленные выше вопросы. Если, однако, кто-то спросит, какой автомобиль подойдет для работы на стройке? Здесь мы можем обсудить даже с учетом конкретных марок автомобилей. Читая дальше, мы получаем ответы на два вопроса: Какой телескоп следует выбрать, чтобы использовать небесные объекты в качестве
Какой пылесос купить, чтобы вы не пожалели об этом?
Какой пылесос купить, чтобы вы не пожалели об этом? Ищите ответы в мании ТОП-10 пылесосов, в которой мы представляем лучшие и самые интересные модели, доступные в польских магазинах. Вы думаете о покупке пылесоса? Мы представляем ТОП-10 хороших пылесосов - разных типов и по разным ценам. Каждый найдет что-то для себя. Помните, что большинство моделей доступно во многих вариантах, в разных цветах и ​​с различным оснащением. В нашем списке лучших пылесосов
Может ли данная соковыжималка выжать чистый сок?
Может ли данная соковыжималка выжать чистый сок? Если в нем много мякоти, прости себя. Ищите другую соковыжималку. Да, я знаю, вы услышите, что мякоть - это здоровая клетчатка. Ну, а зачем тебе соковыжималка? Ешьте морковь или целую и обеспечьте себя большой дозой клетчатки без соковыжималки! Соковыжималка используется для выжимания сока, самого прозрачного сока. Если в стакане сока половина мякоти, беги! Если вы хотите купить соковыжималку премиум-класса, вы бы купили оборудование,
Что я должен сделать, чтобы принять участие и получить возмещение?
Что я должен сделать, чтобы принять участие и получить возмещение? Правила очень просты. Все, что вам нужно сделать, это решить купить продукт, на который распространяется акция, а затем отправить заявку по почте или через страницу nikon.pl/promocje. К заявке должны быть приложены: промо-купон, копия доказательства покупки, копия гарантийного талона и, если товар был приобретен в интернет-магазине, подтверждение заказа на покупку товара для исполнения.
Вы хотите, чтобы тостер побелел, или вы предпочитаете тостер черный и довольно классический?
Вы хотите, чтобы тостер побелел, или вы предпочитаете тостер черный и довольно классический? Никто не может принять это решение снижение , Тем не менее, следующие факторы могут помочь вам найти правильное устройство для покупки на тостере. Размер Для размера тостера мы возвращаемся к исходному типу различия. Таким образом, вы должны выбрать междугородный или двухсторонний тостер.
Вы просто хотите вытащить телефон из кармана и нажать на курок, чтобы сфотографировать, что вы думаете?
Вы просто хотите вытащить телефон из кармана и нажать на курок, чтобы сфотографировать, что вы думаете? Тогда Samsung Galaxy S7 - ваш выбор. С другой стороны, если вы один из приятелей, у которых не всегда есть под рукой свои зеркальные фотокамеры и вам нравится выигрывать с фотографией с мобильного телефона, Huawei P9 - лучший выбор для вас. Производительность обоих телефонов была достаточно сбалансированной для изображений как в условиях низкой, так и в условиях низкой освещенности.
Что должен знать бухгалтер, чтобы идти в ногу со временем и успевать за развитием технологий?
Что должен знать бухгалтер, чтобы идти в ногу со временем и успевать за развитием технологий? Актуально узнать ключевые компетенции в бухгалтерской сфере и то, как они связаны с IT. 5 октября 2017 Президент Украины подписал Закон «О внесении изменений в Закон Украины« О бухгалтерском учете и финансовой отчетности в Украине ». Нововведения вступили в силу в январе 2018 года, кроме тех, которые касаются финансовой отчетности - они
Так может в этом кроется причина решения россиян самоустраниться от обслуживания НАТО?
Так может в этом кроется причина решения россиян самоустраниться от обслуживания НАТО? Как писал когда-то Михаил Жванецкий: "Нам все равно нечего есть, то может мы голодания объявим против чего?». Читайте также: Самолеты с Россией Почему Украине не выгодно "менять" "Русланов" на Ил-76МД .

Encoding = "UTF-8"?
Что нужно сделать, чтобы термос согрелся?
Цель этой статьи не в том, чтобы ответить на вопрос: какой телескоп лучший?
Цель этой статьи не в том, чтобы ответить на вопрос: какой телескоп лучший?
Это как бы ответить на вопрос, какая машина лучшая?
Если, однако, кто-то спросит, какой автомобиль подойдет для работы на стройке?
Какой пылесос купить, чтобы вы не пожалели об этом?
Вы думаете о покупке пылесоса?
Может ли данная соковыжималка выжать чистый сок?
Ну, а зачем тебе соковыжималка?