#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