Я использую разные способы получить банку по идее, но когда я ввожу java -jar ****.jar, это говорит мне no main manifest attribute, in quark-common.jar
Это url моего проекта: https://github.com/ZYao123/JavaQuarkBBS. В проекте 5 модулей. Они могут работать по моей идее, но когда я хочу упаковать jar для linux. Возникают проблемы.
Модуль зависит от quark-parent.quark-parent просто имеет pom.xml для общедоступного пакета.
Я добавил это на pom.xml из quark-common, но они не могут работать.
Я знаю, что это случилось, потому что он не может найти основной метод, но как мне его исправить?
<parent>
<artifactId>quark-parent</artifactId>
<groupId>com.quark</groupId>
<version>1.0-SNAPSHOT</version>
<relativePath>../quark-parent/pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.quark</groupId>
<artifactId>quark-common</artifactId>
<packaging>jar</packaging>
<build>
<finalName>quark-common</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.5.6.RELEASE</version>
</plugin>
</plugins>
</build>
META-INF/MANIFEST.MF:
Manifest-Version: 1.0
Class-Path: spring-tx-4.3.10.RELEASE.jar guava-19.0.jar hibernate-jpa-
2.1-api-1.0.0.Final.jar spring-expression-4.3.10.RELEASE.jar tools.ja
r dom4j-1.6.1.jar spring-boot-starter-data-jpa-1.5.6.RELEASE.jar spri
ng-boot-starter-cache-1.5.6.RELEASE.jar spring-aspects-4.3.10.RELEASE
.jar druid-1.0.29.jar spring-orm-4.3.10.RELEASE.jar spring-context-4.
3.10.RELEASE.jar javassist-3.21.0-GA.jar slf4j-api-1.7.25.jar spring-
boot-starter-aop-1.5.6.RELEASE.jar nekohtml-1.9.22.jar spring-boot-st
arter-jdbc-1.5.6.RELEASE.jar spring-data-jpa-1.11.6.RELEASE.jar antlr
-2.7.7.jar log4j-over-slf4j-1.7.25.jar jackson-annotations-2.8.0.jar
jul-to-slf4j-1.7.25.jar jconsole.jar javax.transaction-api-1.2.jar sp
ring-boot-starter-1.5.6.RELEASE.jar spring-boot-1.5.6.RELEASE.jar log
back-classic-1.1.11.jar spring-data-commons-1.13.6.RELEASE.jar fastjs
on-1.2.16.jar spring-aop-4.3.10.RELEASE.jar spring-beans-4.3.10.RELEA
SE.jar spring-core-4.3.10.RELEASE.jar xercesImpl-2.11.0.jar spring-co
ntext-support-4.3.10.RELEASE.jar snakeyaml-1.17.jar hibernate-commons
-annotations-5.0.1.Final.jar xml-apis-1.4.01.jar jboss-logging-3.3.1.
Final.jar logback-core-1.1.11.jar aspectjweaver-1.8.10.jar ehcache-2.
10.4.jar jandex-2.0.0.Final.jar hibernate-entitymanager-5.0.12.Final.
jar jcl-over-slf4j-1.7.25.jar spring-boot-autoconfigure-1.5.6.RELEASE
.jar tomcat-jdbc-8.5.16.jar spring-boot-starter-logging-1.5.6.RELEASE
.jar hibernate-core-5.0.12.Final.jar mysql-connector-java-5.1.43.jar
spring-jdbc-4.3.10.RELEASE.jar tomcat-juli-8.5.16.jar
Main-Class: com.quark.common.CommonApplication
Снимите упаковочную бирку с баночки и посмотрите, как она работает.
вы можете показать свой класс SpringBootApplication ??




Итак, я создал ваш проект локально, и его манифест в quark-common.jar выглядит примерно так:
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven 3.5.2
Built-By: ...
Build-Jdk: 10.0.2
У него нет основного класса, отсутствуют и другие свойства.
Причина в том, что вам не нужна конфигурация для spring-boot-maven-plugin. Должно получиться что-то вроде:
. . .
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.5.6.RELEASE</version>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<classifier>exec</classifier>
</configuration>
</execution>
</executions>
. . .
Результат MANIFEST.MF будет примерно таким:
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven 3.5.2
Built-By: ...
Build-Jdk: 10.0.2
Main-Class: org.springframework.boot.loader.JarLauncher
Start-Class: com.quark.common.CommonApplication
Spring-Boot-Version: 1.5.6.RELEASE
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib
Затем вы запускаете приложение с java -jar quark-common-exec.jar (он создает дополнительный исполняемый артефакт с расширением exec).
Надеюсь, это поможет тебе.
Обновлять
Отвечая на ваш вопрос:
Я предполагаю, что это произошло из-за того, что вы используете spring-boot-dependencies bom (он предоставляет). А в другом вашем проекте вы использовали spring-boot-starter-parent как родительский для вашего модуля. Как это:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.5.RELEASE</version>
</parent>
Итак, у него есть все необходимые конфигурации плагинов. И spring-boot-dependencies bom этого не делает, он просто предоставляет версии зависимостей и плагинов.
MANIFEST.MF создан по идее. Ничего страшного. Я редактирую свой файл pom.xml, как ваш, и он сработал, большое спасибо, но я хочу знать, почему мой другой проект подходит без узла executions. Версия Springboot - 2.0.4.RELEASE. Из-за версии? Не знаю. Это как по волшебству.
@zhang_ Обновлен исходный ответ.
очень приятно, да пользуюсь spring-boot-starter-parent. большое спасибо
существует ли в проекте quark-common общедоступный статический метод void main (String [] args) и является ли этот класс общедоступным?