почему я упаковал Springboot для JAR, это говорит мне: нет основного атрибута манифеста - PullRequest
0 голосов
/ 10 января 2019

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

1 Ответ

0 голосов
/ 10 января 2019

Итак, я собрал ваш проект локально, и манифест в 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 этого не делает, он просто предоставляет версии зависимостей и плагинов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...