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

Конфигурация плагина Maven Shade для создания uber jar, содержащего только подмодули, основанные на том же groupId

Имея следующую ситуацию:

  • СТС
  • Джава
  • Мавен

Машина Один

рабочая область-01

приложение Java с Maven основано на одном модуле. Он установлен (mvn install) в репозитории, а файл master-project.jar на другой машине установлен и используется для другого проекта, как

<dependency>
  <groupId>com.manuel.jordan</groupId>
  <artifactId>master-project</artifactId>
  <version>0.0.1.SNAPSHOT</version>
</dependency>

Пока здесь все работает нормально

рабочая область-02

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

Давайте предположим следующую структуру для простоты

master-project (<packaging>pom</packaging>)
alpha (<packaging>jar</packaging>)
beta (<packaging>jar</packaging>)
numbers (<packaging>pom</packaging>)
   one (<packaging>jar</packaging>)
   two (<packaging>jar</packaging>)
countries (<packaging>pom</packaging>)
   Europe (<packaging>pom</packaging>)
      France (<packaging>jar</packaging>)
      Italy (<packaging>jar</packaging>)
   AmericaLatina (<packaging>pom</packaging>)
      Peru (<packaging>jar</packaging>)
      Argentina (<packaging>jar</packaging>)

Я могу скомпилировать все эти модули. Поэтому обеспечивайте успех

Цель

Теперь цель состоит в том, чтобы сгенерировать тот же файл master-project.jar, включая подмодули, что и внутренние банки.

После проведения исследования решение: maven-shade-plugin

У меня есть следующая конфигурация (часть ее), используя ссылки на следующие ссылки и другие источники:

Поэтому:

  <modelVersion>4.0.0</modelVersion>
  <packaging>pom</packaging>  <--- it is the main or root pom.xml file

  <groupId>com.manuel.jordan</groupId>
  <artifactId>master-project</artifactId>
  <version>0.0.1-SNAPSHOT</version>

  <properties>
    ....
  </properties>

  <dependencies>
    <dependency>
        <groupId>com.hazelcast</groupId>
        <artifactId>hazelcast-all</artifactId>
        <version>${hazelcast.version}</version>
        <scope>provided</scope> <!-- Otherwise each uber jar within each submodule is 11.6MB -->
    </dependency>
  </dependencies>

  <modules>
    <module>...</module>
    ...
  </modules>

  <build>
    <plugins>
      ....
      <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.2.4</version>
            <executions>
                <execution>
                    <id>create-fat-jar</id>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <artifactSet>
                            <includes>
                                <include>com.manuel.jordan</include>
                            </includes>
                        </artifactSet>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
  </build>

При текущей конфигурации происходит следующее:

Для каждого модуля в каталоге target:

  • С <packaging>pom</packaging> генерирует файл .pom
  • С <packaging>jar</packaging> генерирует два файла .jar, один из самого подмодуля, а другой из uber jar (да для каждого модуля)

Цель: какова дополнительная или отсутствующая конфигурация для создания чего-то вроде этого:

master-project.jar containing
 module1.jar
 module2.jar
 ...
 module3.jar

Где каждый module# имеет одно и то же объявление <groupId>com.manuel.jordan</groupId>, поэтому я объявил

<configuration>
   <artifactSet>
      <includes>
         <include>com.manuel.jordan</include>
      </includes>
   </artifactSet>
</configuration>

И обратите внимание, что корневой/основной файл pom.xml имеет <packaging>pom</packaging>

Цель

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

<dependency>
  <groupId>com.manuel.jordan</groupId>
  <artifactId>master-project</artifactId>
  <version>0.0.1.SNAPSHOT</version>
</dependency>

Таким образом, не имеет значения, является ли проект master-project одномодульным или многомодульным.


  • Вы можете создать модуль упаковки jar под своим мастер-проектом с зависимостью от других модулей и включить туда только конфигурацию плагина тени. 18.08.2020
  • Правильно, напишите, как решение будет отмечено моей стороной 21.09.2020

Ответы:


1

Вы можете создать модуль упаковки jar под своим мастер-проектом с зависимостью от других модулей и включить туда только конфигурацию плагина тени.

21.09.2020
Новые материалы

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

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

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

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

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

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

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