#spring-boot #maven
#spring-boot #maven
Вопрос:
У меня есть приложение Spring Boot, которое работает нормально, но теперь я хочу запустить его через exec jar. Я добавляю в свое приложение следующее…
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>me.Application</mainClass>
</configuration>
<executions>
<execution>
<goals>
<goal>build-info</goal>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
Теперь все, кажется, строится ( mvn package
работает), и я могу работать. Однако, когда я пытаюсь запустить mvn install
, я получаю…
[ERROR] Failed to execute goal org.revapi:revapi-maven-plugin:0.11.4:check (check) on project bot-gateway: The following API problems caused t
he build to fail:
[ERROR] java.class.nonPublicPartOfAPI: class org.springframework.boot.loader.jar.JarEntry: Class 'org.springframework.boot.loader.jar.JarEntry
' is indirectly included in the API (by the means of method return type for example) but the class is not accessible (neither public nor protected).
[ERROR]
[ERROR] Consult the plugin output above for suggestions on how to ignore the found problems
Если я удалю установку плагина maven, она будет работать, но она не может быть выполнена как jar.
Чего мне не хватает?
Обновить
Я тоже пробовал…
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>me.Application</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
Но я все равно получаю…
нет основного атрибута манифеста в target my-war.war
Я могу игнорировать проблему и заставить все правильно строить и запускать, игнорируя проблему, например…
<plugin>
<groupId>org.revapi</groupId>
<artifactId>revapi-maven-plugin</artifactId>
<configuration>
<analysisConfiguration>
<revapi.ignore>
<item>
<code>java.class.nonPublicPartOfAPI</code>
</item>
</revapi.ignore>
</analysisConfiguration>
</configuration>
</plugin>
Но это неприемлемое решение, потому что, если бы с этим возникла законная проблема, я бы ее пропустил.
Комментарии:
1. Я настоятельно рекомендую обновить revapi-maven-plugin, потому что вы используете старую версию… кроме того, удаленная конфигурация maven-assembly-plugin приводит к тому, что spring boot использует spring-boot-maven-plugin … Зачем вам нужен файл войны?
2. @khmarbaise итак, позвольте мне попытаться ответить на все эти вопросы. Сначала, когда я пытаюсь обновить плагин в нашем частном репозитории (мы не можем напрямую обращаться к общедоступным репозиториям), он отклоняется из соображений безопасности. Я открыл заявку, но еще не получил ответа, так что пока об этом не может быть и речи. Я дам вам знать, если это сработает при разрешении.
3. Что касается войны, то она просто обязана быть такой с помощью infra, поэтому я не знаю, могу ли я вдаваться в подробности, потому что я не уверен.
4. Упомянутая проблема — это ошибка в плагине, но класс недоступен (ни общедоступный, ни защищенный). потому что выглядит как частный класс пакета, который выдает ошибку. Это означает, что revapi-maven-plugin необходимо обновить… другого способа нет .. что-то еще не так.. Почему бы не обновить плагин, у которого есть проблемы? Звучит как неправильный путь….
5. @khmarbaise здесь у нас просто есть инструмент командной строки, похожий на yum, через который мы можем запрашивать новые dep, и, по-видимому, есть проблемы, некоторые из которых могут быть ложными флагами. Например, он показывает проблему в том, что dom4j недостаточно новый
Ответ №1:
Все, что вам нужно, это просто настройка Spring Boot по умолчанию, например
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
если вам нужен исполняемый файл JAR, убедитесь, что в вашей упаковке pom не установлено значение WAR
Комментарии:
1. Это не работает, я все еще получаю атрибут no main manifest в target my-war.war
2. можете ли вы поделиться полным pom.xml
3. Я могу добавить части, но будут оставлены dep, которые являются внутренними
4. Я также могу запускать команды для подтверждения версий плагинов и т. Д., Но реальная проблема заключается в: revapi-maven-plugin. Если бы не это, первый из них работал бы
5. странно, что вы показываете targetmy-war.war, а не .jar, так что, возможно, вы установили <packaging>war</packaging> в вашем pom