Цель плагина сборки Maven 'jar-with-dependencies' не включает файл jar из дочернего pom

Я пытался найти правильное решение своего вопроса, но похоже, что он похож на следующий сборка maven включает текущий jar проекта в окончательный zip / tar.

Идея проекта состоит в том, чтобы иметь одну родительскую помпу и пару дочерних. Я хотел бы иметь «jar-with-dependencies» для каждого дочернего элемента, когда я буду выполнять команду «mvn assembly: single» с корневого уровня.

Итак, что у меня есть на данный момент:

  1. Если я выполню mvn package и mvn assembly:single один за другим, то первый будет успешно завершен, а второй - с предупреждением о том, что дочерний проект не был включен. Поскольку мой модуль не включен, я не могу запустить цель.
  2. Если я выполню mvn package assembly:single, то будет создана необходимая банка со всеми зависимостями, и я смогу запустить цель.

Боюсь, что пропустил конфигурацию в одном из моих pom.xml. Буду признателен, если кто-нибудь сможет мне с этим помочь. В этом примере я добавляю ссылка на сайт в репозиторий GitHub.

кстати, я использую maven-assembly-plugin версию 3.1.0

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

Пожалуйста, покажите свои файлы pom и покажите всю структуру каталогов ....

khmarbaise 01.07.2018 13:24
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
638
2

Ответы 2

Ключевым моментом является отключение выполнения сборки для родительского проекта: этого можно добиться, объединив опцию <skipAssembly>, секцию profiles и секцию properties.

Со следующими файлами pom он работает нормально.

Родительский 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/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <groupId>com.slemarchand.samples.jarwithdependencies</groupId>
     <artifactId>parent</artifactId>
     <version>1.0-SNAPSHOT</version>
     <packaging>pom</packaging>
     <name>parent</name>
     <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
        <skip.assembly>true</skip.assembly>
     </properties>
     <modules>
        <module>child1</module>
        <module>child2</module>
     </modules>
     <dependencyManagement>
        <dependencies>
           <dependency>
              <groupId>junit</groupId>
              <artifactId>junit</artifactId>
              <version>4.11</version>
              <scope>test</scope>
           </dependency>
        </dependencies>
     </dependencyManagement>
     <build>
        <pluginManagement>
           <plugins>
              <plugin>
                 <artifactId>maven-assembly-plugin</artifactId>
                 <configuration>
                    <skipAssembly>${skip.assembly}</skipAssembly>
                    <descriptorRefs>
                       <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                 </configuration>
              </plugin>
           </plugins>
        </pluginManagement>
     </build>
     <profiles>
        <profile>
           <id>jar</id>
           <activation>
              <file>
                 <exists>${basedir}/src/main/java</exists>
              </file>
           </activation>
           <properties>
              <skip.assembly>false</skip.assembly>
           </properties>
        </profile>
     </profiles>
</project>

Ребенок 1 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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>com.slemarchand.samples.jarwithdependencies</groupId>
    <artifactId>parent</artifactId>
    <version>1.0-SNAPSHOT</version>
  </parent>

  <artifactId>child1</artifactId>
  <version>1.0-SNAPSHOT</version>

  <name>child1</name>

  <dependencies>

    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>25.1-jre</version>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
    </dependency>

  </dependencies>
</project>

Ребенок 2 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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>com.slemarchand.samples.jarwithdependencies</groupId>
    <artifactId>parent</artifactId>
    <version>1.0-SNAPSHOT</version>
  </parent>

  <artifactId>child2</artifactId>
  <version>1.0-SNAPSHOT</version>

  <name>child2</name>

  <dependencies>

    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.0</version>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
    </dependency>
  </dependencies>

  <build>
  </build>
</project>

Вы можете найти образец проекта здесь: https://gitlab.com/slemarchand/jar-with-dependencies-multi-module-sample.

Спасибо за ответы. Оказывается, если была некорректная конфигурация в дочернем pom.xml. Я не добавил определение плагина в раздел плагинов: <build> <plugins> HERE <plugins> </build> Итак, это было правильно описано в разделе <pluginManagement>, и это меня ослепляет ...

Другие вопросы по теме