Добавление каталога зависимостей jar в манифест пути к классу с помощью Maven maven-jar-плагина

#maven #maven-plugin

Вопрос:

Я использую плагин maven-jar-plugin и пытаюсь добавить банки зависимостей в свою банку:

https://maven.apache.org/shared/maven-archiver/examples/classpath.html

 <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <archive>
                    <index>true</index>
                    <manifest>
                        <addClasspath>true</addClasspath>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
 

Файл manifest.mf затем содержит список всех необходимых зависимостей; т. е.:

… Путь к классу: netty-all-4.1.22.Final.jar …

Однако мой плагин maven-dependency-plugin указывает, что зависимости помещаются в папку /dependency-jars:

 <configuration>
    <outputDirectory>
            ${project.build.directory}/dependency-jars/
    </outputDirectory>
</configuration>
 

И поэтому зависимости не будут найдены, когда мы выполним jar.

Тег <addClasspath>true</addClasspath> автоматически добавляет все указанные зависимости, но как добавить префикс каталога ко всем из них?

Комментарии:

1. Зачем тебе это нужно? Почему бы не использовать в качестве обычной зависимости? И почему вы используете плагин maven-dependency-для копирования их в каталог? Вы пытаетесь создать исполняемый файл jar?

2. Да, я пытаюсь сгенерировать исполняемый файл jar. И я хочу, чтобы все мои материалы о зависимостях были в отдельной подпапке. AddClassPath автоматически добавляет зависимости, но как их привязать к папке, в которой они на самом деле находятся?

3. Исходя из вашего подхода, сама jar не является исполняемой, поскольку она зависит от внешних каталогов, заполненных зависимостями. Лучший подход-использовать плагин maven-shade…. это приведет к созданию одной банки, содержащей все необходимые депы…

4. Спасибо. Я использовал shading/uber, но я считаю, что должен быть способ, чтобы автоматически сгенерированный путь к классу также включал папку зависимостей. Вместо того, чтобы сдаваться, я продолжу искать решение для правильного построения манифеста.

5. Нашел ответ в [ maven.apache.org/shared/maven-archiver/examples/classpath.html] : <classpathPrefix>lib/<classpathPrefix></classpathPrefix>. Всегда есть способ 🙂

Ответ №1:

Похоже, ответ таков:

 <classpathPrefix>lib/</classpathPrefix>
 

как подробно описано в:

https://maven.apache.org/shared/maven-archiver/examples/classpath.html