Плагин сборки Maven - игнорировать 'архив не может быть пустым' - PullRequest
0 голосов
/ 18 июня 2020

У меня проблема с плагином сборки. Мне нужно использовать одно определение сборки, которое создает файл JAR для большего количества модулей. Итак, структура проекта выглядит так:

module/
----module1/
-------- pom.xml
----module2/
-------- pom.xml
----moduleX/
-------- pom.xml
assembly_jar.xml
pom.xml (this is parent)

Родительский файл pom выглядит следующим образом:

<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.my.project</groupId>
    <artifactId>parent-module</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <executions>
                  <execution>
                    <id>make-jar</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                    <configuration>
                        <attach>false</attach>
                        <descriptors>
                            <descriptor>${source-systems.basedir}/assembly_jar.xml</descriptor>
                        </descriptors>
                        <finalName>${project.artifactId}-${project.version}</finalName>
                        <appendAssemblyId>false</appendAssemblyId>
                    </configuration>
                </execution>
            </plugin>
        </plugins>
    </build>
</project>

assembly_jar. xml выглядит следующим образом:

<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0 http://maven.apache.org/xsd/assembly-2.0.0.xsd">
  <id>jar-with-some-dependencies</id>
  <formats>
    <format>jar</format>
  </formats>
  <includeBaseDirectory>false</includeBaseDirectory>
  <dependencySets>
    <dependencySet>
      <outputDirectory>/</outputDirectory>
      <useProjectArtifact>true</useProjectArtifact>
      <scope>runtime</scope>
      <unpack>true</unpack>
    </dependencySet>
  </dependencySets>
</assembly>

pom файл модуля 1 выглядит так:

<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.my.project</groupId>
    <artifactId>parent-module</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <relativePath>../pom.xml</relativePath>
  </parent>

  <packaging>pom</packaging>
  <groupId>com.my.project</groupId>
  <artifactId>module1</artifactId>
  <version>1.0.0-SNAPSHOT</version>
  <name>oracle_rds</name>

  <dependencies>
    <dependency>
      <groupId>com.oracle</groupId>
      <artifactId>ojdbc6</artifactId>
      <version>11.2.0.4</version>
    </dependency>
  </dependencies>

</project>

Когда я запускаю mvn clean install для модуля 1, все работает нормально и создается файл jar. Но тогда у меня есть модуль 2, который не требует каких-либо конкретных зависимостей. Итак, файл pom выглядит так:

<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.my.project</groupId>
    <artifactId>parent-module</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <relativePath>../pom.xml</relativePath>
  </parent>

  <packaging>pom</packaging>
  <groupId>com.my.project</groupId>
  <artifactId>module2</artifactId>
  <version>1.0.0-SNAPSHOT</version>
  <name>oracle_rds</name>

</project>

Когда я запускаю mvn clean install У меня ошибка Ошибка при создании архива сборки jar-with-some-dependencies: архив не может быть пустым Это потому, что нет зависимости от упаковки в файл jar.

Есть ли способ игнорировать эту ошибку и не создавать файл jar, если в модуле нет зависимостей?

Я не хочу переносить определение сборки в модуль из-за большого дублирования (у меня будет более 100 модулей, и большинство из них будут иметь какие-то особые зависимости) Спасибо за помощь.

...