Выполнение приложения Springboot как jar не дает "основного атрибута манифеста"

Я использую разные способы получить банку по идее, но когда я ввожу 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

существует ли в проекте quark-common общедоступный статический метод void main (String [] args) и является ли этот класс общедоступным?

rjdkolb 10.01.2019 05:57

Снимите упаковочную бирку с баночки и посмотрите, как она работает.

Jonathan JOhx 10.01.2019 05:59

вы можете показать свой класс SpringBootApplication ??

abhilash_goyal 10.01.2019 06:25
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
4 518
1

Ответы 1

Итак, я создал ваш проект локально, и его манифест в 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_ 10.01.2019 06:27

@zhang_ Обновлен исходный ответ.

rxn1d 10.01.2019 06:59

очень приятно, да пользуюсь spring-boot-starter-parent. большое спасибо

zhang_ 18.01.2019 06:00

Другие вопросы по теме