Nano Hash - криптовалюты, майнинг, программирование

Maven Общие зависимости нескольких проектов исключают jar из войны

У нас есть несколько веб-проектов (более 100), настраиваемые файлы jar и проекты веб-служб REST в нашей среде. Мы использовали ANT для сборки с Jboss5.2.1, и я пытаюсь перейти на Maven с MyEclipse 2019 и развернуть его на сервере Tomcat. Все необходимые общие jar-файлы находятся в Jboss/server/default/lib и добавляются в путь сборки веб-проекта. Мы не хотим, чтобы jar-файлы зависимостей были упакованы в файлы WAR. С Maven зависимости добавляются к войне, увеличивая размер войны. Мы хотели бы иметь эти зависимости, такие как gson, poi и т. д., в общем месте и ссылаться на них, используя путь сборки. Это возможно?

Я читал об использовании системной области. Но поскольку это устарело и не рекомендуется, я не хочу идти по этому пути. Настройка локального репозитория maven с родительским проектом также, похоже, не сработает для нас, потому что я не хочу, чтобы jar зависимостей находился в папке lib файла WAR.

Является ли использование Maven правильным подходом в этом случае? MyEclipse CI 2019 по умолчанию создает все веб-проекты как проекты Maven. Так что мне придется найти способ отключить это, если это не правильный инструмент сборки для нас.

Упаковка JAR-файлов зависимостей в WAR здесь неприемлема, так как группа развертывания считает, что это излишне увеличивает размер каждой WAR-записи. Я новичок в Maven и пытаюсь правильно настроить проект. Спасибо вам за помощь!


  • Глобальные библиотеки, как правило, являются плохим подходом, которым точно является часть server/default/lib. Обычно война должна быть упакована и содержать все необходимое. Кроме того, вам нужен сервер JBoss или вы делаете две вещи. Отойти от Ant и перейти от JBoss только к Tomcat? – khmarbaise 7 минут назад 23.07.2019
  • Мы уходим от JBoss и переходим на Tomcat. Раньше у нас были EJB, но мы движемся в направлении использования веб-сервисов REST. Война со всем увеличивает размер войны, тем самым увеличивая время запуска сервера. Поскольку у нас более 100 войн, со временем это суммируется. Не могли бы вы уточнить, почему глобальные библиотеки — плохой подход? 23.07.2019
  • Я не писал, что война должна содержать все. В нем должно быть только то, что действительно необходимо. Если вам нравятся службы REST, каждая служба должна быть независимой друг от друга, а основная идея служб REST (микрослужбы?) - это принцип ничего не делиться... Если у вас есть несколько общих библиотек, вам нужно тестировать каждое изменение для всех службы... нет возможности изменить библиотеку для одной службы, в которой находится реальная проблема. Так что, кроме того, было бы неплохо подумать о Spring Boot, который точно содержит Tomcat и т. д. и упрощает разработку и т. д. (тестирование и т. д.). 23.07.2019
  • Спасибо за объяснение! Однако есть ли способ добиться этого при использовании Maven? Каждая служба REST будет независима друг от друга, однако мы хотели бы, чтобы банки были общими в общем месте. 23.07.2019
  • Если это важно, в последних версиях MyEclipse мы заставили проекты Java EE 8 основываться на Maven, но у вас все еще есть выбор для более ранних версий Java EE. Мы приняли это решение, потому что обнаружили, что большинство пользователей все равно используют Maven, и вероятность того, что он будет использоваться для нового проекта Java EE 8, довольно высока. Совершенно уверен, что с Maven можно добиться того, чего вы хотите, и в любом случае это, вероятно, лучший инструмент для работы. К сожалению, не так просто быть более конкретным, не понимая архитектуру вашего приложения, связи проекта и т. д. Надеюсь, это поможет! 23.07.2019
  • Благодарю вас! Мы согласны с использованием Maven, однако нам нужно иметь возможность использовать jar-файлы зависимостей, такие как gson, poi и т. д., из Tomcat/shared lib, а не упаковывать их в войну, тем самым увеличивая размер войны. 23.07.2019

Ответы:


1

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

Итак, вам нужно сделать две вещи:

  • Добавьте банки на свой сервер (Jboss/Tomcat), чтобы они были доступны во время выполнения.
  • Добавьте банки в качестве provided зависимостей для войн, которым они нужны. Это означает, что вы определяете зависимость от них, но устанавливаете <scope>provided</provided>.

Это приводит к тому, что зависимости доступны во время компиляции, но не включаются в войну.

Помните, однако, что наличие множества общих библиотек затрудняет обновление одной из них.

23.07.2019
  • Благодарю вас! Это то, что я искал. Я добавил банки в Tomcat/lib/SharedFolder и включил их в shared.loader в catalina.properties. 23.07.2019
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..