Как установить дополнительные записи Class-Path в манифесте с помощью плагина onejar Maven?
Есть ли способ добавить произвольную запись пути к классу в манифест JAR-файла с помощью onejar-maven-plugin?
Я нашел способ настроить maven-jar-plugin для этого, но похоже, что для onejar-maven-plugin такой опции нет.
Это делается не для того, чтобы найти дополнительные классы (иначе зачем использовать плагин onejar, верно?), А для того, чтобы найти файл конфигурации, который должен быть внешним по отношению к JAR.
Есть ли прямое решение или обходной путь для этого?
3 ответа
Действительно ли требуется использование плагина one-jar? Вы можете достичь той же цели (упаковка в один jar-файл вашего приложения И все необходимые зависимости, включая переходные, И добавить конфигурацию для Class-Path И используя более стабильный / стандартный плагин), применяя следующий подход:
- Сконфигурируйте запись Class-Path в вашем Jar-приложении, используя плагин Maven Jar и подход, который вы упомянули в вопросе.
- Используйте плагин сборки Maven для упаковки одного JAR-файла, включая зависимости, как описано здесь, в другой вопрос / ответ stackru.
Пример исполняемого файла one-jar (без использования плагина one-jar) может быть следующим:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<!-- your further configuration here -->
</configuration>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.sample.MainApp</mainClass>
<!-- your further configuration here -->
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
Если вам нужно поиграть с classpath и Maven, я бы посоветовал также проверить этот вопрос здесь на stackru.
Добавление произвольных записей манифеста возможно в 1.4.5:
<plugin>
<groupId>org.dstovall</groupId>
<artifactId>onejar-maven-plugin</artifactId>
<version>1.4.5</version>
<executions>
<execution>
<configuration>
<manifestEntries>
<Build-Status>Yes</Build-Status>
</manifestEntries>
</configuration>
<goals>
<goal>one-jar</goal>
</goals>
</execution>
</executions>
</plugin>
Похоже, что проект onejar-maven-plugin больше не находится в активной разработке, поэтому вам может понадобиться переключиться на другие решения (например, maven-assembly-plugin).
Плагин недоступен в Maven Central. Кто-то еще поместил его версию в Maven Central с другим идентификатором группы.
Дополнительные библиотеки могут быть добавлены в classpath во время запуска. Свойство one-jar.class.path можно использовать
один-jar.class.path
Дополнительные пути к классам для добавления в среду выполнения. Используйте независимый от платформы разделитель пути '|'
Пример: --one-jar.class.path="./lib/two.jar|/opt/lib/three.jar"
Источник: http://one-jar.sourceforge.net/index.php?page=details