Как создать одну библиотеку jar из проекта maven с несколькими подмодулями?

У меня довольно большой проект java maven с более чем 200 модулями, все в порядке. Я пытаюсь объединить все эти модули в одну банку.

В некоторых случаях было бы очень удобно объявить только одну новую зависимость maven, например. my-library-5.2.4-SNAPSHOT-bundle.jar или что-то подобное в новых проектах.

Я пробовал использовать плагин сборки maven. Я могу создать новый файл jar, jar содержит все jar-файлы модулей, и он правильно переходит в локальную папку .m2, если я его установлю. Jar можно объявить как зависимость в других проектах.

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

Я добавил этот раздел сборки в свой корневой файл pom.xml:

<build>
    <plugins>
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <executions>
                <execution>
                    <id>make-bundle</id>
                    <goals>
                        <goal>single</goal>
                    </goals>
                    <phase>package</phase>
                    <configuration>
                        <descriptors>
                            <descriptor>assembly.xml</descriptor>
                        </descriptors>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

А мой файл assembly.xml выглядит так:

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
    <id>bundle</id>
    <formats>
        <format>jar</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <moduleSets>
        <moduleSet>
            <useAllReactorProjects>true</useAllReactorProjects>
            <binaries>
                <outputDirectory>modules</outputDirectory>
                <unpack>false</unpack>
            </binaries>
        </moduleSet>
    </moduleSets>
</assembly>

person pasuna    schedule 16.05.2016    source источник
comment
mkyong.com/maven/create-a -fat-jar-file-maven-assembly-plugin   -  person Alan Hay    schedule 16.05.2016


Ответы (1)


Практики Maven:

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

Вам следует использовать подмодуль «распространение», который объединяет все остальные артефакты вашего модуля, а не пытаться сделать это в родительском модуле.

Например -

Создайте простой проект родительского файла pom (с упаковкой pom) в общем для всех проектов

<?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>my.library</groupId>
    <artifactId>my-library-parent</artifactId>
    <version>1.0.0</version>
    <packaging>pom</packaging>

    <distributionManagement>
        <repository>
            <id>site</id>
            <url>http://url_id</url>
        </repository>
    </distributionManagement>

</project>

Теперь для всех проектов, которые вы хотите использовать, просто включите этот раздел:

<parent>
  <groupId>my.library</groupId>
  <artifactId>my-library-parent</artifactId>
  <version>1.0.0</version>
</parent>
person Arijeet Saha    schedule 16.05.2016