нет ошибки основного атрибута манифеста для моего maven проекта VSCode - PullRequest
1 голос
/ 09 января 2020

После того, как я собрал свой проект java с помощью maven и попытался запустить исполняемый файл (нет ошибок или предупреждений при сборке), я получаю следующую ошибку:

C:\Users\User\Documents\Java\clothes-assistant\target>java -jar clothes-assistant-0.0.1-SNAPSHOT.jar
no main manifest attribute, in clothes-assistant-0.0.1-SNAPSHOT.jar

Ниже приводится мой pom . xml файл, я думаю, что запутался в теге, но я взял фрагменты с других форумов StackOverflow, и они сделали что-то похожее, поэтому я не знаю, где я мог испортить.

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>me.louisspaghetti</groupId>
  <artifactId>clothes-assistant</artifactId>
  <version>0.0.1-SNAPSHOT</version>

  <name>clothes-assistant</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
          <configuration>
            <archive>
              <manifest>
                <mainClass>me.louisspaghetti.App</mainClass>
              </manifest>
            </archive>
        </configuration>
        </plugin>
        <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-jar-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
        <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
        <plugin>
          <artifactId>maven-site-plugin</artifactId>
          <version>3.7.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-project-info-reports-plugin</artifactId>
          <version>3.0.0</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>

ПРИМЕЧАНИЕ. Я использую VSCode, поэтому у меня нет доступа к каким-либо IDE-Specifi c функциям сборки

1 Ответ

0 голосов
/ 09 января 2020

Вы определяете свой основной класс в чистой конфигурации плагина, что не имеет смысла; вы должны сконфигурировать его в maven-jar-plugin-configuration:

    <plugin>
      <artifactId>maven-jar-plugin</artifactId>
      <version>3.0.2</version>
      <configuration>
        <archive>
          <manifest>
            <mainClass>me.louisspaghetti.App</mainClass>
          </manifest>
        </archive>
      </configuration>
    </plugin>

Это будет указывать maven помещать объявление основного класса в сгенерированный jarfile, в файле MANIFEST.MF:

$ unzip -l target/clothes-assistant-0.0.1-SNAPSHOT.jar 
Archive:  target/clothes-assistant-0.0.1-SNAPSHOT.jar
  Length      Date    Time    Name
---------  ---------- -----   ----
      131  01-09-2020 09:31   META-INF/MANIFEST.MF
        0  01-09-2020 09:31   META-INF/

, который будет содержать что-то вроде:

Manifest-Version: 1.0
Created-By: Apache Maven
Build-Jdk: 1.8.0
Main-Class: me.louisspaghetti.App

, это значение, которое java -jar будет использовать для поиска основного класса в jarfile.

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