Maven-как я могу добавить произвольную запись classpath в банку?
У меня есть необычная ситуация, когда мне нужно добавить произвольную запись classpath (которая указывает на файл jar) в манифест исполняемого jar. (Это для настольного приложения.)
плагин maven-jar генерирует запись "Class-Path" для манифеста jar с использованием зависимостей maven, и, похоже, нет никакого способа добавления произвольных записей.
Я также посмотрел на жесткое кодирование произвольной записи classpath в пакетный файл, который запускается приложение, используя параметр "- classpath", но я не могу понять, как заставить Maven фильтровать classpath в пакетный файл.
3 ответа:
я обнаружил, что есть простое решение для этой проблемы. Вы можете добавить
<Class-Path>
элемент<manifestEntries>
элемент, и установить<addClassPath>true</addClassPath>
до<manifest>
элемент. Так что значение<Class-Path>
элемент добавляется в class-path автоматически. Пример:<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifest> <addDefaultImplementationEntries>true</addDefaultImplementationEntries> <addClasspath>true</addClasspath> <mainClass>your.main.Class</mainClass> </manifest> <manifestEntries> <Class-Path>../conf/</Class-Path> </manifestEntries> </archive> </configuration> </plugin>
Update: вот как отфильтровать путь к классу в пользовательский манифест.
Maven-dependency-плагин
build-classpath
цель может быть настроена для вывода classpath в файл в формате свойств (т. е. classpath=[classpath]). Затем вы настраиваете элемент filters для использования созданного файла пути к классам и настраиваете каталог ресурсов для фильтрации.например:
<build> <plugins> <plugin> <artifactId>maven-dependency-plugin</artifactId> <version>2.1</version> <executions> <execution> <phase>generate-resources</phase> <goals> <goal>build-classpath</goal> </goals> </execution> </executions> <configuration> <outputFilterFile>true</outputFilterFile> <outputFile>${project.build.directory}/classpath.properties</outputFile> </configuration> </plugin> <plugin> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifestFile> ${project.build.outputDirectory}/META-INF/MANIFEST.MF </manifestFile> </archive> </configuration> </plugin> </plugins> <filters> <filter>${project.build.directory}/classpath.properties</filter> </filters> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> </build>
затем укажите в поле src/main/resources/META-INF / Manifest.МФ:
Bundle-Version: 4.0.0 ... Classpath: ${classpath};[specify additional entries here]
Примечание: есть ошибка с этой обработкой с помощью стандартного разделителя пути окна (
\
), путь генерации лишен разделителей (обратите внимание, что он отлично работает в Linux). Вы можете получить путь к классам, чтобы быть сгенерированы правильно для Windows, указав<fileSeparator>\\</fileSeparator>
на цели.
вы можете настроить манифест в jar-plugin'ы. Делать так что вы бы добавили что-то вроде этого в свой пом.
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> ... <configuration> <archive> <index>true</index> <manifest> <addClasspath>true</addClasspath> </manifest> <manifestEntries> <mode>development</mode> <url>${pom.url}</url> <key>value</key> </manifestEntries> </archive> </configuration> ... </plugin>
полное спецификация архиватором предоставляет довольно много вариантов. Смотрите примеры страницы для параметров настройки пути к классам.
если ни один из них не работает для вас, вы можете определите свой собственный манифест, настроить свойства, содержащие необходимые записи и использовать фильтр заполнить манифест с этими свойствами