Подтвердить что ты не робот

Maven Assembly Plugin не устанавливает настройку манифеста MainClass

У меня есть проект maven, который генерирует банку с помощью плагина сборки maven Я хочу запустить консольное приложение. Однако атрибут MainClass не установлен в MANIFEST.MF. Вот моя конфигурация плагина:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.2.1</version>
            <configuration>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
                <archive>
                    <manifest>
                        <mainClass>net.justaprogrammer.poi.cleanser.Cleanser</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>

Однако это не добавляется в MANIFEST.MF в банке, сгенерированной mvn package. Созданный манифест ниже:

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Built-By: zippy
Build-Jdk: 1.6.0_25

Что я делаю неправильно?

4b9b3361

Ответ 1

Я пропустил, что вы не создали свою сборку на упаковке. У вас есть проект jar, поэтому Maven построит банку с помощью maven-jar-plugin. Вам не обязательно иметь что-то в своем пом, чтобы сказать это. Эта конфигурация Maven для вас работает. В построенной банке будут только ваши классы и ресурсы проекта. Если вы хотите добавить Main-Class в манифест в этой банке, вы должны настроить плагин jar для этого. В основном, просто переместите конфигурацию archive в плагин jar.

Однако, если вы действительно хотите собрать исполняемую жировую банку, то есть банку, которая включает в себя все ваши классы, а также классы всех ваших зависимостей - тогда у вас есть настройка в нужном месте, но вам нужно запустить плагин сборки с помощью mvn assembly:single или привязать эту цель к фазе жизненного цикла. Чтобы быть ясным, если вы это сделаете, тогда ваш проект выведет две банки: одну, которая содержит ваши файлы проекта, и тот, который содержит это, плюс содержимое всех библиотек, от которых зависит ваш проект. Первый построен плагином jar. Это последнее построено плагином сборки. Обратите внимание, что жирные банки обычно не используются, и вы можете столкнуться с необычными проблемами, когда используете их, потому что они скорее вне сферы обычного Java-материала.

Ответ 2

Если вы используете плагин maven shade для создания толстой банки (а не или в дополнение к использованию плагина сборки), стоит отметить, что дескрипторы плагинов оттенков в файле MANIFEST.MF немного отличаются друг от друга; см. плагин теневого плагина исполняемый баннер.

Ответ 3

Вероятно, вам нужно добавить конфигурацию maven-jar-plugin и настроить также MainClass. Сборка распаковывает все JAR файлы (например, банки проекта и банки с зависимостями), и я думаю, что последний MANIFEST.MF, найденный в списке файлов JAR, "перезаписывает" ожидаемый/сгенерированный манифест .mf.