Ошибка no main manifest attribute in jar

First, it’s kind of weird, to see you run java -jar "app" and not java -jar app.jar

Second, to make a jar executable… you need to jar a file called META-INF/MANIFEST.MF

the file itself should have (at least) this one liner:

Main-Class: com.mypackage.MyClass

Where com.mypackage.MyClass is the class holding the public static void main(String[] args) entry point.

Note that there are several ways to get this done either with the CLI, Maven, Ant or Gradle:

For CLI, the following command will do: (tks @dvvrt)

jar cmvf META-INF/MANIFEST.MF <new-jar-filename>.jar  <files to include>

For Maven, something like the following snippet should do the trick. Note that this is only the plugin definition, not the full pom.xml:

Latest doc on this plugin: see https://maven.apache.org/plugins/maven-jar-plugin/

<build>
  <plugins>
    <plugin>
      <!-- Build an executable JAR -->
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-jar-plugin</artifactId>
      <version>3.1.0</version>
      <configuration>
        <archive>
          <manifest>
            <addClasspath>true</addClasspath>
            <classpathPrefix>lib/</classpathPrefix>
            <mainClass>com.mypackage.MyClass</mainClass>
          </manifest>
        </archive>
      </configuration>
    </plugin>
  </plugins>
</build>

(Pick a <version> appropriate to your project.)

For Ant, the snippet below should help:

<jar destfile="build/main/checksites.jar">
  <fileset dir="build/main/classes"/>
  <zipfileset includes="**/*.class" src="lib/main/some.jar"/>
  <manifest>
    <attribute name="Main-Class" value="com.acme.checksites.Main"/>
  </manifest>
</jar>

Credits Michael Niemand —

For Gradle:

plugins {
    id 'java'
}

jar {
    manifest {
        attributes(
                'Main-Class': 'com.mypackage.MyClass'
        )
    }
}

пытаюсь собрать проект с помощью maven, выдается ошибка no main manifest attribute, in first_project.jar.
pom.xml

<?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>first_project</groupId>
    <artifactId>first_project</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>firstProject</name>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <mainClass>deleveryClub.MainApp</mainClass>
    </properties>

    <organization>
        <!-- Used as the 'Vendor' for JNLP generation -->
        <name>Your Organisation</name>
    </organization>
    <dependencies>
        <!-- https://mvnrepository.com/artifact/junit/junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>3.141.59</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.openjfx/javafx-controls -->
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-controls</artifactId>
            <version>12</version>
        </dependency>


        <!-- https://mvnrepository.com/artifact/org.openjfx/javafx-base -->
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-base</artifactId>
            <version>11.0.1</version>
        </dependency>


        <!-- https://mvnrepository.com/artifact/org.openjfx/javafx-graphics -->
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-graphics</artifactId>
            <version>11</version>
        </dependency>



    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <release>11</release>

                </configuration>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.6.0</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>java</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <mainClass>deleveryClub.MainApp</mainClass>
                </configuration>
            </plugin>

            <plugin>
                <!-- Build an executable JAR -->
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.1.0</version>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib/</classpathPrefix>
                            <mainClass>deleveryClub.MainApp</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

ссылка на проект: https://github.com/CptWasp/vk-tester-selenium


  • Вопрос задан

    более трёх лет назад

  • 24699 просмотров

Здравствуйте!
Скажите пожалуйста, каким IDE вы собираете проект? Если Intellij IDEA, то мне эта проблема уже знакома…
Не раз натыкался на нее… В общем, когда вы собираете jar, то почему-то intellij idea если выбрать create jar from modules & dependencies создает jar некорректно. Эта проблема актуально до последней версии. И соответственно, в jar не попадает папка META-INF И файл MANIFEST.MF
Чтобы это исключить создайте jar — empty
Сама ошибка говорит о том, что в jar файле у вас нет вышеуказанного файла и папки. Тогда заработает корректно.
Также, если это maven || gradle, то положите папку meta-inf на уровень проекта, либо в папку resources. Не в java!
Вот, тут мой ответ по данному вопросу (со скриншотом) — https://stackoverflow.com/questions/1082580/how-to…

Для решения нужно изменить путь до папки с manifest`ом

srcmainjava -> srcmainresources

Картинка

5ee6370d84fd5432619338.png

Пригласить эксперта

Вообще-то! Для сведения: при ручной сборке JARа, из cmd строкой:
…>javac -cp «.;test.jar» prog.java,
JAR потом запускается в cmd вот такой строкой: ….>java -cp «.;test.jar» prog
Если же набить команду: ….>java -jar test.jar, то не запустится, И НЕ ДОЛЖЕН!
cmd выдаст такой же результат — no main manifest attribute, хотя, если раззиповать JARник, файл манифеста В НЁМ ЕСТЬ!


  • Показать ещё
    Загружается…

07 июн. 2023, в 10:19

20000 руб./за проект

07 июн. 2023, в 10:07

500 руб./за проект

07 июн. 2023, в 08:55

500 руб./за проект

Минуточку внимания

Every executable jar file in a Java application should contain a main method. It is usually placed at the beginning of the application. Manifest files must be included with self-executing jars, as well as being wrapped in the project at the appropriate location, to run a main method. Manifest files have a main attribute that specifies the class having the main method.

“no main manifest attribute” is a common error which happens when we try to run an executable jar file. The full error output may look like what’s shown below

Unable to execute jar- file: "no main manifest attribute." Code language: JavaScript (javascript)

Or

no main manifest attribute, in target/exec.jar

img

In this article, we will show you a few possible fix that you can apply to your Java project to avoid getting “no main manifest attribute” error.

“no main manifest attribute” error message is thrown because of various reasons, but most of the time, it fall under one of the following category.

  • Missing entry point of Main-Class in MANIFEST.MF file.
  • Missing Maven dependency in pom.xml
  • Missing entry point in build.gradle

The Main, or Main-Class is an essential attribute to make your jar executable. It tells Java which class would be used as the entry point of the application.

Without a Main, or Main-Class attribute, Java have no way to know which class it should run when you execute the jar.

Inside the jar file, the MANIFEST.MF file is located in META-INF folder. Opening the jar file with WinRAR, you would see the contents of it, along with MANIFEST.MF.

A typical MANIFEST.MF file should contain the following lines

Manifest-Version: the version of the Manifest file.
Built-By: your PC name.
Build-Jdk: the JDK version installed in your machine.
Created-By: the plugin name used in IDE.Code language: HTTP (http)

Below is an example of a MANIFEST.MF file.

Main-Class in MANIFEST.MF

Putting maven-jar-plugin in pom.xml

The “no main manifest attribute” error message may occur in a Maven project due to the absence of the Main-Class entry in MANIFEST.MF.

This issue can be resolved by adding maven-jar-plugin to our pom.xml file.

<build>  
    <plugins>  
        <plugin>  
            <!-- Build an executable JAR -->  
            <groupId>org.apache.maven.plugins</groupId>  
            <artifactId>maven-jar-plugin</artifactId>  
            <version>3.1.0</version>  
            <configuration>  
                <archive>  
                    <manifest>  
                        <mainClass>com.linuxpip.AppMain</mainClass>  
                    </manifest>  
                </archive>  
            </configuration>  
        </plugin>  
    </plugins>  
</build>  Code language: HTML, XML (xml)

In the code snippet above, com.linuxpip.AppMain is our fully-qualified name of the Main-Class. You have to change this according to your specific project.

If you need more information, dig deep into maven-jar-plugin documentation: see https://maven.apache.org/plugins/maven-jar-plugin/

Specify Main-Class in Gradle

The following entries can be put into your build.gradle file if you receive this error in your Gradle project:

plugins {
    id 'java'
}

jar {
    manifest {
        attributes(
                'Main-Class': 'com.linuxpip.MyClass'
        )
    }
}Code language: JavaScript (javascript)

In the code snippet above, com.linuxpip.MyClass is our fully-qualified name of the Main-Class. You have to change this according to your specific project.

Change default MANIFEST.MF folder in IntelliJ IDEA

People have been reporting that IntelliJ IDEA keeps putting the JAR artifact into the wrong folder.

In order to fix “no main manifest attribute” in IntelliJ IDEA, choose JAR > From modules with dependencies

From modules with dependencies

In the Create JAR from Modules window, change the default Directory for META-INF/MANIFEST.MF path from <project folder>srcmainjava to <project folder>srcmainresources.

Otherwise it would generate the manifest and including it in the jar, but not the one in <project folder>srcmainjava that Java expects.

After that, just continue to Build Artifacts as you usually do.

IntelliJ IDEA Build Artifacts

Specify entry point in Eclipse

If you’re exporting the JAR file in Eclipse, it has a built-in option that allows you to specify the Application’s entry point, avoiding “no main manifest attribute” error message.

In Eclipse’s JAR Export window, you would see “Select the class of the application entry point” near the end of the Export process. Now you can pick a class and Eclipse will automatically generate the proper MANIFEST.MF file with the settings you’ve set.

Fix "no main manifest attribute" error message in Eclipse

Also check out: Arithmetic shift vs Logical shift

You’ve built a Java project and packaged a .jar file.

You are ready to run it outside your IDE, or deploy it somewhere.

When you run it using java -jar <your.jar> it says something like this:

no main manifest attribute, in /src/project/target/your-jar-1.0-SNAPSHOT.jar

How to add a Manifest file

You need to create a META-INF/MANIFEST.MF file with the following content:

Main-Class: com.mypackage.MyClass

The class name com.mypackage.MyClass is the main class that has the public static void main(String[] args) entry point in your application.

If you’re using Maven

If using Maven, then you will need to add this to your POM.xml:

<build>
  <plugins>
    <plugin>
      <!-- Build an executable JAR -->
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-jar-plugin</artifactId>
      <version>3.1.0</version>
      <configuration>
        <archive>
          <manifest>
            <addClasspath>true</addClasspath>
            <classpathPrefix>lib/</classpathPrefix>
            <mainClass>com.mypackage.MyClass</mainClass>
          </manifest>
        </archive>
      </configuration>
    </plugin>
  </plugins>
</build>

If you’re using Gradle

Likewise, if you’re using Gradle, then use this:

plugins {
    id 'java'
}

jar {
    manifest {
        attributes (
                'Main-Class': 'com.mypackage.MyClass'
        )
    }
}

If you didn’t build an Executable Jar

Then you can run it like this:

java -cp app.jar com.mypackage.MyClass

If all else fails: Use this Maven Single Goal

If all else has failed, then you can always use this Maven goal to get the job done:

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <executions>
      <execution>
        <phase>package</phase>
        <goals>
          <goal>single</goal>
        </goals>
      </execution>
    </executions>
    <configuration>
      <archive>
        <manifest>
          <addClasspath>true</addClasspath>
          <mainClass>com.mypackage.MyClass</mainClass>
        </manifest>
      </archive>
      <descriptorRefs>
        <descriptorRef>jar-with-dependencies</descriptorRef>
      </descriptorRefs>
    </configuration>
  </plugin> 

In this post, we will see how to solve Unable to execute jar- file: “no main manifest attribute”.

Table of Contents

  • Problem
  • Solution
    • Maven
      • Spring boot application
    • Gradle
  • Root cause

Problem

When you have a self-executable jar and trying to execute it. You might get this error.

Unable to execute jar- file: “no main manifest attribute”

Solution

Maven

You might get this error when Main-Class entry is missing in MANIFEST.MF file. You can put maven-jar-plugin plugin in pom.xml to fix it.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

<build>

    <plugins>

        <plugin>

            <!— Build an executable JAR —>

            <groupId>org.apache.maven.plugins</groupId>

            <artifactId>maven-jar-plugin</artifactId>

            <version>3.1.0</version>

            <configuration>

                <archive>

                    <manifest>

                        <mainClass>org.arpit.java2blog.AppMain</mainClass>

                    </manifest>

                </archive>

            </configuration>

        </plugin>

    </plugins>

</build>

org.arpit.java2blog.AppMain is a fully qualified name of main class. You need to replace it with your application’s main class.
Run mvn clean install and then execute the jar file as below.

java jar AppMain0.0.1SNAPSHOT.jar

AppMain-0.0.1-SNAPSHOT.jar is application jar that you want to run.

Spring boot application

In case, you are getting an error while running spring boot application, you can solve it with spring-boot-maven-plugin.

<build>

    <plugins>

        <plugin>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-maven-plugin</artifactId>

            <version>2.0.1.RELEASE</version>

        </plugin>

    </plugins>

</build>

Gradle

In case you are using gradle, you can solve this with following entry.

plugins {

    id ‘java’

}

jar {

    manifest {

        attributes(

                ‘Main-Class’: ‘org.arpit.java2blog.AppMain’

        )

    }

}

Please replace org.arpit.java2blog.AppMain with your main class.

Root cause

When you run self-executable jar, java will look for the Main-Class in MANIFEST.MF file located under META-INF folder. If it is not able to find an entry,then it will complain with Unable to execute jar- file: “no main manifest attribute”.

MANIFEST.MF contains information about files contained in the Jar file.

ManifestVersion: 1.0

BuiltBy: Arpit Mandliya

BuildJdk: 1.8.0_101

CreatedBy: Maven Integration for Eclipse

Once you run the above-mentioned solution and reopen MANIFEST.MF file in jar again, you will see Main-Class entry.

ManifestVersion: 1.0

BuiltBy: Arpit Mandliya

BuildJdk: 1.8.0_101

CreatedBy: Maven Integration for Eclipse

MainClass: org.arpit.java2blog.AppMain

This should solve Unable to execute jar- file: “no main manifest attribute”. Please comment in case you are still facing the issue.

Problem

Sometimes you face the following error while runing an executable jar :

No main manifest attribute, in “<APP_NAME>.jar”

Solution

  • Main-class property is missing on your jars META-INF/MANIFEST.MF. Correct it by adding the following lines to your pom.xml

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

<build>

<plugins>

<plugin>

<!— Build an executable JAR —>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-jar-plugin</artifactId>

<version>2.4</version>

<configuration>

<archive>

<manifest>

<mainClass>com.roufid.tutorials.AppTest</mainClass>

</manifest>

</archive>

</configuration>

</plugin>

</plugins>

</build>

Consider that the the fully qualified name of your Main class is com.roufid.tutorials.AppTest

  • Launch a clean install on your application
  • Run your executable jar using the following command :

    java jar AppTest0.0.1SNAPSHOT.jar

Take time to understand !

Since your are running an executable jar file, Java will look for the manifest MANIFEST.MF located under META-INF/ which contains information about the files packaged.

Java must know the main class to run. This information was missing in the MANIFEST.MF. Below the content of this file before adding the maven-jar-plugin :

ManifestVersion: 1.0

BuiltBy: Radouane ROUFID

BuildJdk: 1.7.0_79

CreatedBy: Apache Maven 3.3.3

ArchiverVersion: Plexus Archiver

There is no mention of a Main-Class !

We used maven-jar-plugin to handle jar content and manifest configuration, specially adding a Main-Class property to MANIFEST.MF file to specify the project main class. Below the aim of the property :

  • <mainClass>com.roufid.tutorials.AppTest</mainClass>
    Is to make our Jar executable. You must set here the fully qualified name of your Main class.

The manifest classpath produced using the above configuration would look like this:

ManifestVersion: 1.0

BuiltBy: Radouane ROUFID

BuildJdk: 1.7.0_79

CreatedBy: Apache Maven 3.3.3

MainClass: com.roufid.tutorials.AppTest

ArchiverVersion: Plexus Archiver

References

  • Jar manifest file
  • Apache Maven JAR Plugin

30 ответов

Во-первых, это странно, если вы запустите java -jar "app", а не java -jar app.jar

Во-вторых, чтобы сделать исполняемый файл jar… вам нужно записать файл META-INF/MANIFEST.MF

сам файл должен иметь (по крайней мере) этот один вкладыш:

Main-Class: com.mypackage.MyClass

Где com.mypackage.MyClass — класс, содержащий основную точку статического void main (String [] args).

Обратите внимание, что есть несколько способов сделать это с CLI, Maven или Ant:

Для CLI выполните следующую команду: (tks @dvvrt)

jar cmvf META-INF/MANIFEST.MF <new-jar-filename>.jar <files to include>

Для Maven что-то вроде следующего фрагмента должно делать трюк. Обратите внимание, что это только определение плагина, а не полный pom.xml:

<build>
  <plugins>
    <plugin>
      <!-- Build an executable JAR -->
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-jar-plugin</artifactId>
      <version>3.0.2</version>
      <configuration>
        <archive>
          <manifest>
            <addClasspath>true</addClasspath>
            <classpathPrefix>lib/</classpathPrefix>
            <mainClass>com.mypackage.MyClass</mainClass>
          </manifest>
        </archive>
      </configuration>
    </plugin>
  </plugins>
</build>

(Выберите <version>, соответствующий вашему проекту.)

Для Ant приведенный ниже фрагмент поможет:

<jar destfile="build/main/checksites.jar">
  <fileset dir="build/main/classes"/>
  <zipfileset includes="**/*.class" src="lib/main/some.jar"/>
  <manifest>
    <attribute name="Main-Class" value="com.acme.checksites.Main"/>
  </manifest>
</jar>

Кредиты Майкл Ниманд —

Olivier Refalo
13 март 2012, в 19:14

Поделиться

Это должно быть java -jar app.jar вместо java -jar "app".

Параметр -jar работает только в том случае, если JAR файл является исполняемым JAR файлом, что означает, что в нем должен быть файл манифеста с атрибутом Main-Class. См. «Программы упаковки в файлах JAR» , чтобы узнать, как создать исполняемый JAR.

Если это не исполняемый JAR, вам нужно запустить программу с чем-то вроде:

java -cp app.jar com.somepackage.SomeClass

где com.somepackage.SomeClass — это класс, содержащий метод main для запуска программы. (То, что этот класс зависит от программы, невозможно сообщить из предоставленной вами информации).

Jesper
13 март 2012, в 19:22

Поделиться

В качестве альтернативы вы можете использовать maven-assembly-plugin, как показано в следующем примере:

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <executions>
      <execution>
        <phase>package</phase>
        <goals>
          <goal>single</goal>
        </goals>
      </execution>
    </executions>
    <configuration>
      <archive>
        <manifest>
          <addClasspath>true</addClasspath>
          <mainClass>com.package.MainClass</mainClass>
        </manifest>
      </archive>
      <descriptorRefs>
        <descriptorRef>jar-with-dependencies</descriptorRef>
      </descriptorRefs>
    </configuration>
  </plugin> 

В этом примере все баны с зависимостями, как указано в разделе, будут автоматически включены в вашу единственную банку. Обратите внимание, что jar-with-dependencies должны быть буквально помечены как, а не заменены именами файлов jar, которые вы хотите включить.

CodePlumber
26 дек. 2014, в 23:51

Поделиться

Это потому, что Java не может найти главный атрибут в файле MANIFEST.MF.
Главный атрибут необходим, чтобы указать java, какой класс он должен использовать в качестве точки входа приложения. В файле jar файл MANIFEST.MF находится в папке META-INF. Интересно, как вы могли бы посмотреть, что внутри файла jar? Откройте файл jar с помощью WinRAR.

Основной атрибут внутри MANIFEST.MF выглядит следующим образом:

Main-Class: <packagename>.<classname>

Вы получаете эту ошибку «нет основного манифеста», когда эта строка отсутствует в файле MANIFEST.MF.

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

Обновление: я просто нашел очень аккуратный способ указать точку входа приложения в eclipse.
Когда вы говорите «Экспорт»,

Select Jar and next 

[ give it a name in the next window ] and next

and next again

and you'll see " Select the class of the application entry point".

Just pick a class and Eclipse will automatically build a cool MANIFEST.MF for you.

Изображение 1488

Sasanka Panguluri
29 сен. 2013, в 02:18

Поделиться

Ответ Gradle заключается в том, чтобы добавить параметр jar/manifest/attributes следующим образом:

apply plugin: 'java'

jar {
    manifest {
        attributes 'Main-Class': 'com.package.app.Class'
    }
}

QED
10 май 2016, в 00:51

Поделиться

Для maven это то, что его решило (для меня, для кодовой базы Veetle на GitHub):

<build>
<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>2.0</version>
    <executions>
      <execution>
        <phase>package</phase>
        <goals>
          <goal>shade</goal>
        </goals>
        <configuration>
          <transformers>
            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
              <mainClass>org.lazydevs.veetle.api.VeetleAPI</mainClass>
            </transformer>
          </transformers>
        </configuration>
      </execution>
    </executions>
  </plugin>
 </plugins>
</build>

Приветствие…

Dave
01 март 2013, в 16:36

Поделиться

Попробуйте эту команду включить банку:

java -cp yourJarName.jar your.package..your.MainClass

Burhan ARAS
23 авг. 2013, в 08:27

Поделиться

Для меня ни один из ответов не помог — у меня был файл манифеста в правильном месте, содержащий Main-Class и все. Что меня смутило:

Предупреждение. Текстовый файл, из которого вы создаете манифест, должен завершите новую линию или возврат каретки. Последняя строка не будет правильно разбирается, если он не заканчивается новой строкой или возвратом каретки.

(источник). Добавление новой строки в конце манифеста зафиксировано.

eis
25 янв. 2015, в 09:20

Поделиться

У меня возникла эта проблема при создании банки с использованием IntelliJ IDEA. См. это обсуждение.

Для меня было решено создать артефакт jar, выбрав JAR > Из модулей с зависимостями, но не принимая каталог по умолчанию для META-INF/MANIFEST.MF. Измените его -/src/main/java на -/src/main/resources.

В противном случае он включал файл манифеста в банке, но не тот, который был в /src/main/java, который должен иметь.

morningstar
09 авг. 2016, в 18:03

Поделиться

Если jar не соответствует правилам, это не исполняемый банку.

John M
13 март 2012, в 19:07

Поделиться

Если вы используете Maven, включите следующее в pom

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.4.2.RELEASE</version>
</parent>

<properties>
    <java.version>1.8</java.version>
</properties>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

shuang
23 нояб. 2016, в 21:33

Поделиться

Я столкнулся с той же проблемой, и теперь она исправлена ​​:)
Просто выполните следующие шаги, и ошибка может быть для чего угодно, но нижеследующие шаги делают процесс более плавным. Я трачу много времени, чтобы найти исправление.

1. Перезагрузите Eclipse (если вы используете Eclipse для создания JAR файла)
— > На самом деле это помогло моей проблеме в правильном экспортировании файла JAR.

2. После перезапуска eclipse попытайтесь выяснить, может ли ваше eclipse распознать основной класс/метод по вашему проекту Java → щелкните правой кнопкой мыши → Запустить как → Запустить конфигурации → Главная → нажмите кнопку «Поиск», чтобы узнать, может ли ваше затмение искать ваш основной класс в файле JAR.
— > Это для проверки того, что JAR файл будет иметь точку входа в основной класс.

  1. После этого экспортируйте свой Java Dynamic проект как «Runnable JAR», а не JAR файл.

  2. В конфигурации запуска Java выберите свой основной класс.

  3. После экспорта файла jar используйте следующую команду для выполнения.
    java -cp [ваш JAR].jar [полный пакет].MainClass
    например: java -cp AppleTCRuleAudit.jar com.apple.tcruleaudit.classes.TCRuleAudit

  4. Вы можете столкнуться с неподдерживаемой ошибкой версии Java. исправление заключается в изменении java_home в вашем профиле оболочки bash в соответствии с версией java, используемой для компиляции проекта в eclipse.

Надеюсь, это поможет! Пожалуйста, дайте мне знать, если у вас все еще есть проблемы.

Karthik Pon
26 фев. 2016, в 00:03

Поделиться

Для меня эта ошибка произошла просто потому, что я забыл сказать Eclipse, что мне нужен исполняемый файл jar, а не простой файл jar библиотеки. Поэтому, когда вы создаете файл jar в Eclipse, убедитесь, что вы нажимаете правую радиокнопку

Neeraj Bhatnagar
27 нояб. 2015, в 07:52

Поделиться

Возможно, вы не создали файл jar правильно:

ex: отсутствующий параметр m в создании jar

Следующие работы:

jar -cvfm MyJar.jar Manifest.txt *.class

satheesh.v
28 авг. 2013, в 19:30

Поделиться

Любой исполняемый файл jar должен запускаться либо щелчком, либо запуском, используя командную строку, например java -jar app.jar(используйте «если путь jar содержит пробел» — т.е. java -jar «C:имя папки app.jar» ). Если ваша исполняемая банка не запущена, что означает, что она не создана должным образом.

Для лучшего понимания извлеките файл jar (или просмотрите с помощью любого инструмента, для Windows 7-Zip — хороший) и проверьте файл в /META -INF/MANIFEST.MF. Если вы найдете любую запись, например

Main-Class: your.package.name.ClaaswithMain — тогда это хорошо, иначе вы должны его предоставить.

Помните о добавлении записи Main-Class в файле MANIFEST.MF, проверьте, где вы ее сохраняете!

Shekh Akther
03 авг. 2012, в 14:45

Поделиться

У меня была такая же проблема сегодня. Моя проблема была решена с моей движущейся META-INF в папку ресурсов.

RegUser
23 апр. 2017, в 15:02

Поделиться

Вышеуказанные ответы были лишь частично полезными для меня. java -cp был частью ответа, но мне нужна была более подробная информация о том, как идентифицировать класс для запуска. Вот что сработало для меня:

Шаг 1: найдите класс, который нужно запустить

jar tf /path/to/myjar.jar | more

Верхними строками результата были:

META-INF/
META-INF/MANIFEST.MF
somepath/
somepath/App.class
META-INF/maven/
...

В App.class содержался основной класс для запуска. Я не уверен на 100%, если вы всегда можете предположить, что класс, в котором вы нуждаетесь, является первым, но это было для меня. Если это не так, я бы предположил, что использовать grep не так уж сложно, чтобы исключить результаты, связанные с библиотекой, для того, чтобы перечислить список классов до управляемого размера.

Оттуда было легко: я просто использую этот путь (минус суффикс «.class» ):

java -cp /path/to/myjar.jar somepath/App

mwag
21 апр. 2017, в 21:44

Поделиться

Вы можете просто следовать этому шагу
 Создайте файл jar с помощью

 jar -cfm jarfile-name manifest-filename Class-file name

При запуске jar файла пропустите прогон, как этот

 java -cp jarfile-name main-classname

Koneri
28 сен. 2013, в 06:08

Поделиться

У меня такая же ошибка.
Если вы используете gradle, просто добавьте следующий в ur gradle.build:

apply plugin: 'java'

jar {
    manifest {
        attributes 'Main-Class': 'com.company.project.MainClass'
    }
}

Где com.company.project.MainClass путь к ур-классу с помощью метода public static void main(String[] args).

Binakot
01 сен. 2017, в 12:02

Поделиться

(первый пост — значит, он не может быть чистым)

Это мое решение для OS X 11.6, основанной на Maven Netbeans 8.2. До сих пор мое приложение на 100% Netbeans — без настройки (всего несколько скинов для невозможного!).

Пробовав большинство ответов здесь и в других местах безрезультатно, я вернулся к искусству «использовать то, что работает».

Верхний ответ здесь (olivier-refalo thanx) выглядел как подходящее место для начала, но не помогло.

Посмотрев на другие проекты, которые действительно работали, я заметил некоторые незначительные отличия в манифестных строках:

  • addClasspath, classpathPrefix отсутствовали (удалены)
  • В mainClass отсутствовала команда «com». (используется NB → Проект
    Свойства- > Выполнить- > Основной класс- > Обзор для указания)

Не уверен, почему (я всего лишь 3 месяца в java) или как, но могу только сказать, что это сработало.

Здесь используется только модифицированный блок манифеста:

    <manifest>
        <mainClass>mypackage.MyClass</mainClass>
    </manifest>

MichaelT
19 июнь 2017, в 20:56

Поделиться

Поскольку вы добавили MANIFEST.MF, я думаю, вы должны рассмотреть порядок поля в этом файле. Мой env java version "1.8.0_91"

и мой MANIFEST.MF как здесь

// MANIFEST.MF
Manifest-Version: 1.0
Created-By: 1.8.0_91 (Oracle Corporation)
Main-Class: HelloWorldSwing

// run
~ java -jar HelloWorldSwing.jar
no main manifest attribute, in HelloWorldSwing.jar

Однако, как показано ниже, выполните

Manifest-Version: 1.0
Main-Class: HelloWorldSwing
Created-By: 1.8.0_91 (Oracle Corporation)

//this run swing normally

Fan Yer
22 март 2017, в 10:35

Поделиться

У меня была та же проблема. Многие решения, упомянутые здесь, не дали мне полной картины, поэтому я попытаюсь дать вам краткое описание того, как упаковать файлы jar из командной строки.

  • Если вы хотите иметь свои файлы .class в пакетах, добавьте пакет в начало .java.

    Test.java

    package testpackage;
    
    public class Test
    {
        ...
    }
    
  • Чтобы скомпилировать ваш код с вашими файлами .class в результате структуры, заданной именем пакета, используйте:

    javac -d . Test.java
    

    -d . заставляет компилятор создать нужную структуру каталогов.

  • При упаковке файла .jar вам необходимо проинструктировать процедуру jar о том, как ее упаковать. Здесь мы используем опцию set cvfeP. Это сохранить структуру пакета (опция P), указать точку входа, чтобы файл манифеста содержал содержательную информацию (опция e). Опция f позволяет указать имя файла, опция c создает архив, а опция v устанавливает вывод в подробный. Здесь важными являются P и e.

    Затем появляется имя флага, в котором мы хотим test.jar.

    Затем появляется точка входа.

    И затем приходит -C . <packagename>/, чтобы получить файлы классов из этой папки, сохраняя структуру папок.

    jar cvfeP test.jar testpackage.Test -C . testpackage/
    
  • Проверьте файл .jar в почтовой программе. Он должен иметь следующую структуру

    test.jar

    META-INF
    | MANIFEST.MF
    testpackage
    | Test.class
    

    MANIFEST.MF должен содержать следующие

    Manifest-Version: 1.0
    Created-By: <JDK Version> (Oracle Corporation)
    Main-Class: testpackage.Test
    

    Если вы отредактируете манифест вручную , обязательно сохраните символ новой строки в конце, иначе java не узнает его.

  • Выполните .jar файл

    java -jar test.jar
    

CodeMonkey
20 янв. 2017, в 07:26

Поделиться

Я лично считаю, что все ответы здесь неверно понимают вопрос. Ответ на это заключается в различии того, как spring -boot создает .jar. Всем известно, что Spring Boot устанавливает такой манифест, который отличается от allones asssumption тем, что это стандартный запуск .jar, который он может или не может быть:

Start-Class: com.myco.eventlogging.MyService
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Spring-Boot-Version: 1.4.0.RELEASE
Created-By: Apache Maven 3.3.9
Build-Jdk: 1.8.0_131
Main-Class: org.springframework.boot.loader.JarLauncher

Возможно, ему нужно выполнить с org.springframework.boot.loader.JarLauncher в пути к классам?

djangofan
27 окт. 2017, в 18:58

Поделиться

Просто, чтобы ясно указать на

Main-Class: <packagename>.<classname>

Если у вас нет пакета, вы должны игнорировать эту часть, например:

Main-Class: <classname>

Reihan_amn
22 сен. 2017, в 22:37

Поделиться

У меня была эта проблема, и я решил ее недавно, сделав это в Netbeans 8 (см. изображение ниже):

Изображение 1489

  • перейдите в свойства вашего проекта.
  • нажмите Запустить.
  • укажите основной класс вашего проекта с помощью просмотра.
  • построить и запустить файл Jar.

Abdelsalam A. Shahlol
01 фев. 2017, в 06:42

Поделиться

У меня была такая же проблема, как и вы,
ниже синтаксиса для успешного создания файла .war: —

jar {cvf} [jar-file] [файл-манифест]

манифеста При создании (c) или обновлении (u) файла JAR операнд манифеста определяет существующие файлы манифеста с именами и значениями атрибутов, которые должны быть включены в файл MANIFEST.MF в файле JAR. Описанный операнд должен быть указан, если параметр f присутствует. [1] ‘.

Чтобы создать файл манифеста, вам нужно определить значение для некоторых атрибутов, вы можете поместить звездочку после имени файла (.WAR), чтобы избежать создания файла манифеста: —

jar -cvf foo.war *

Честно говоря, я не знаю, является ли это лучшей практикой, но это делает для меня работу:).

M.87
28 дек. 2016, в 13:55

Поделиться

проверьте свой файл jar внутри MANIFEST.MF Main-Class доступен или нет

first.java

class first
{
        public static void main (String arg[ ])
        {
           System.out.println("Welcome to the world of Java");
        }
}

До

Manifest-Version: 1.0
Created-By: 1.7.0_80 (Oracle Corporation)

[email protected]:~/Documents$ java -jar first.jar
no main manifest attribute, in first.jar

После:

Manifest-Version: 1.0
Created-By: 1.7.0_80 (Oracle Corporation)
Main-Class: first

[email protected]:~/Documents$ java -jar first.jar 
Welcome to the world of Java

KARTHIKEYAN.A
04 дек. 2016, в 01:45

Поделиться

Если вы используете командную строку для сборки .jar, можно указать на main без добавления файла манифеста. Пример:

jar cfve app.jar TheNameOfClassWithMainMethod *.class

(param «e» делает это: TheNameOfClassWithMainMethod — это имя класса с методом main() и app.jar — имя исполняемого файла .jar и *.class — просто все файлы классов для сборки)

Andrey
20 нояб. 2016, в 01:52

Поделиться

Проверьте локальную директорию .m2 для подкаталога этого артефакта.
Если exixts — удалить его и снова выполнить обновление Maven

dushkin
05 июль 2016, в 14:28

Поделиться

У вас может быть такая же проблема, как у меня. Создав файл .jar, напишите jar xf app.jar META-INF/MANIFEST.MF. Это создаст копию файла в ваш текущий каталог, чтобы вы могли его прочитать. Если он говорит только что-то вроде:

Манифест-версия: 1.0

Создано: 1.8.0_51 (Oracle Corporation)

и не содержит объявления «Main-Class», тогда я думаю, что вы нашли свою проблему.

Я не знаю, как это решить. Я проверил других людей с одинаковыми/похожими проблемами в StackOverflow и не смог найти ответ. Однако с этой информацией вы можете получить некоторую помощь (учитывая тот факт, что у вас есть такая же проблема, как и я).

Изменить: я попытался с файлом манифеста, но не получил его на работу, но моя ошибка заключалась в том, чтобы назвать только один из классов при создании jar файла. Я написал *.class, и теперь он работает.

Хотя я не знаю, почему существует необходимость создания файла манифеста. Но я думаю, это прекрасно, пока оно работает.

Gendarme
17 нояб. 2015, в 23:39

Поделиться

Ещё вопросы

  • 0Написание функции в php
  • 0C ++ скопировать #define в массив символов
  • 1ошибка при попытке использовать keras.utils.plot_model
  • 0выбрать все товары из дочерних категорий в родительской категории
  • 0Поддержка Knex для чтения реплик
  • 1Почему действие возвращается к предыдущему, когда я получаю данные из базы данных?
  • 0ng-options & ng-repeat: почему угловая модель не привязана?
  • 1Как исправить «java.io.IOException: чтение не удалось, сокет может быть закрыт или истекло время ожидания» при попытке подключения к сопряженному устройству?
  • 0PHP вставить массив входных данных, используя foreach
  • 1Как преобразовать дату, которую пользователь выбирает в формате MM-дд-гггг, в формат гггг-мм-дд в Java
  • 1Chrome как отключить ключевое слово отладчика или отключить паузу
  • 1Сохранение стилей при замене слов в python-docx
  • 1Почему я получаю AccessControlException: доступ запрещен при добавлении BouncyCastleProvider в сервлет Security in Tomcat
  • 1Частичное переопределение метода: как?
  • 0Перечисление данных медленно в codeigniter
  • 1Как получить разные цвета для разных диапазонов значений в простых линейных графиках Google?
  • 1Примените UDF к подмножествам pyspark dataframe
  • 1Изображение Angular 4 не найдено в templateURL, но работает в строке шаблона
  • 1CSV писать альтернативные пробелы в строках внутри цикла Python
  • 1Как сравнить Resultset.getString () с String в Java?
  • 0Я хочу получать вложения в электронное письмо от формы
  • 1Чудновская формула в питоне
  • 1Обновление данных из Vuex дает бесконечный цикл в watcher
  • 0Выпадающее меню CSS3 при наведении на размер
  • 1Импортировать модуль из родительского каталога в пакетах
  • 0Добавить данные реляционного запроса в основной результат JSON
  • 1Не удается создать узел cq, когда включен компонент CQ5
  • 0Laravel 5.4 Вызов функции-члена attach () в null при вставке в сводную таблицу
  • 0удалить регистр из идентификатора элемента перед добавлением правила?
  • 0Изменяемая ручка блокирует перетаскиваемое взаимодействие
  • 0C ++ указатели или память
  • 1Как проверить все флажки в списке флажков при первой загрузке страницы?
  • 1Значения атрибутов привязки данных к комбинированному списку
  • 0_DEBUG и LLVM 5.0 C ++: ожидаемое значение препроцессора в выражении
  • 1Обобщения Java с любым типом <?>
  • 1Как поставить задержку для функции в JavaScript? [Дубликат]
  • 1Редактирование текстового средства просмотра текста для всех редактируемых текстов в просмотре списка
  • 1Передача значения со страницы в Html.ActionLink
  • 0Как плавно анимировать, настраивать цвет и управлять индикатором выполнения jQuery UI?
  • 0Вставка выбранного значения из заполненного MySQL выпадающего
  • 0Как отредактировать значение 3 метки после нажатия на HREF с Javascript?
  • 0HTML включен боковое меню мешает междустрочный интервал
  • 0Элементы таблицы и неупорядоченные списки нельзя просматривать должным образом во всех версиях Internet Explorer
  • 0Обновление JQuery до более новой версии, но какой?
  • 1генерировать случайное число с плавающей точкой в C #
  • 1Число больше 9 начинается сверху и остается там
  • 1Grid View Row Команда Событие Пост Назад
  • 1Замена всех элементов, кроме последнего, в определенных строках 2D-массива
  • 1Экспорт таблицы Excel с сервера в JavaScript
  • 0MVC 3 Вставить строковый HTML-код, используя jquery

Понравилась статья? Поделить с друзьями:
  • Ошибка no jvm could be found
  • Ошибка no function definition vlax get acad object
  • Ошибка no function definition vlax ename vla object
  • Ошибка no function definition nil
  • Ошибка no entry cfgworlds