Алгоритм формирования jar файла

В jar файле есть папка META-INF/services. Вопрос кто и как туда вносит информацию?

Сейчас у меня при сборке одного и того-же проекта при помощи maven и IDEA в нескольких файлах из этой папки оказывается различная информация. В результате проект собранный maven у меня не работает.

maven собирается плагином maven-shade-plugin

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>3.2.4</version>
    <configuration>
        <transformers>
            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                <mainClass>org.example.Loader</mainClass>
                <manifestEntries>
                    <Multi-Release>true</Multi-Release>
                </manifestEntries>
            </transformer>
        </transformers>
    </configuration>
    <executions>
        <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
        </execution>
    </executions>
</plugin>


Ответы (1 шт):

Автор решения: Anton Shchyrov

Плагин maven-shade-plugin по умолчанию помещает в итоговый jar первый попавшийся файл из META-INF/services зависимых модулей. Но если плагину указать трансформер org.apache.maven.plugins.shade.resource.ServicesResourceTransformer

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>3.2.4</version>
    <configuration>
        <transformers>
            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                <mainClass>org.example.Loader</mainClass>
                <manifestEntries>
                    <Multi-Release>true</Multi-Release>
                </manifestEntries>
            </transformer>
            <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
        </transformers>
    </configuration>
    <executions>
        <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
        </execution>
    </executions>
</plugin>

то тогда при обнаружении в зависимых модулях в папке META-INF/services файлов с одинаковым именем, в конечном jar эти все файлы будут объединены.

→ Ссылка